从 db 获取数据到 laravel 5.2 中的视图的问题

Posted

技术标签:

【中文标题】从 db 获取数据到 laravel 5.2 中的视图的问题【英文标题】:Issue in fetching data from db to the views in laravel 5.2 【发布时间】:2016-05-22 21:31:48 【问题描述】:

我是 laravel 的新手,我自己在 laravel 5.2 中创建了一些测试项目来研究它。但是我现在在 laravel 5.2 中从 db 正确获取数据并显示结果时遇到了一些问题。我的数据库中有一个菜单表,其中包含字段-> id、menutype、itemname、itemprice、itemimage,其中包含一些数据。我想以特定方式在我的网页上显示它,如下面的屏幕截图所示。

见:

这是我的数据库表截图,上面有值。看:

我在我的控制器(GuestController.php)中添加了以下代码

public function menu() 
    $result=DB::table('menu')->select('menutype')->distinct()->get();
    return view('guest.menu')->with('data',$result);                
   

在视图(menu.blade.php)中,我给出了以下代码:

<div class="row">
    @foreach($data as $row)
    <div class="col-1-3">
      <div class="wrap-col">
        <h3>$row->menutype</h3>
        <?php
        $item=DB::table('menu')->where('menutype', $row->menutype)->get();  
        ?>
        @foreach($item as $row)
        <div class="post">
          <a href="#"><img src="assets/images/$row->itemimage"/></a>
          <div class="wrapper">
            <h5><a href="#">$row->itemname</a></h5>
            <span>Rs.$row->itemprice/-</span>
          </div>
        </div>
        @endforeach
      </div>
    </div>
    @endforeach
</div>

这工作得很好,我得到了所需的输出,如上面给出的产品页面截图所示。但我知道这种方法不正确,因为我在 View 本身上给出查询语句,如下所示以获取数据及其违反 MVC 概念:

<?php $item=DB::table('menu')->where('menutype', $row->menutype)->get(); ?> 

那么我是否可以实施任何其他简单和更好的方法来获得上述所需的输出,同时保持 MVC 标准?请帮忙!提前谢谢...

【问题讨论】:

【参考方案1】:

Laravel 的 Collection 可以真正帮助你解决这个问题。具体来说,groupBy 方法。首先,您将获得所有包含所有数据的菜单项。然后,您使用集合上的groupBy 方法将菜单项分组到基于它们的menutype 的单独数组中。然后,您可以使用这个集合来完成您视图中的所有工作。

代码如下所示。如果您愿意,可以将几行合并为一行,但它会分成多行以显示所有步骤:

public function menu() 
    // get all the menu items
    $menuArray = DB::table('menu')->get();
    // create a Laravel Collection for the items
    $menuCollection = collect($menuArray);
    // group the Collection on the menutype field
    $groupedMenu = $menuCollection->groupBy('menutype');

    /**
     * Note that Eloquent queries (using Models) will automatically return
     * Collections, so if you have your Menu model setup, your first two
     * lines would just be:
     * $menuCollection = Menu::get();
     * or, all three lines could be combined into:
     * $groupedMenu = Menu::get()->groupBy('menutype');
     */

    // pass the grouped Collection to the view
    return view('guest.menu')->with('data', $groupedMenu);

现在,在您看来,您的外部 foreach 将遍历组。内部 foreach 将遍历每个组中的项目:

<div class="row">
    @foreach($data as $type => $items)
    <div class="col-1-3">
      <div class="wrap-col">
        <h3>$type</h3>
        @foreach($items as $item)
        <div class="post">
          <a href="#"><img src="assets/images/$item->itemimage"/></a>
          <div class="wrapper">
            <h5><a href="#">$item->itemname</a></h5>
            <span>Rs.$item->itemprice/-</span>
          </div>
        </div>
        @endforeach
      </div>
    </div>
    @endforeach
</div>

【讨论】:

嗨。这完美地工作。谢谢人.... :) 我认为这种方法在其他人在这里发布的其他方法中更正确。这种方法是直接编写的,在视图部分没有任何棘手的编码。再次感谢您。

以上是关于从 db 获取数据到 laravel 5.2 中的视图的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从控制器获取记录到 Ajax laravel 5.2

如何从 laravel 5.2 中的网站提取 API? [关闭]

Laravel 5.2 - 如何将变量(数组和整数)从视图传递到控制器?

如何从Laravel 5.2中的textarea获得价值?

Laravel 5.2 Eloquent ORM 从 3 个表中获取数据

注册表未将数据提交到数据库 Laravel 5.2