【问题标题】:Issue in fetching data from db to the views in laravel 5.2从 db 获取数据到 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 标准?请帮忙!提前谢谢...

【问题讨论】:

    标签: php database laravel view controller


    【解决方案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>
    

    【讨论】:

    • 嗨。这完美地工作。谢谢人.... :) 我认为这种方法在其他人在这里发布的其他方法中更正确。这种方法是直接编写的,在视图部分没有任何棘手的编码。再次感谢您。
    猜你喜欢
    • 2017-03-13
    • 2019-11-12
    • 1970-01-01
    • 2017-10-16
    • 2016-11-16
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多