带有数据库下拉菜单的补充工具栏

时间:2018-04-29 20:10:13

标签: php html laravel-5

我尝试使用数据库在我网站的侧边栏上添加菜单项。我的数据库结构如下:

ID / Product_Name/ Product_Type
1 / product1 / type1
2 / product2 / type1
3 / product3 / type2
4 / product4 / type2

我需要一个侧栏,每种类型都列为菜单项,属于该类型的产品作为子菜单项:

  Type1
    product1 
    product2 
  Type2
    product3
    product4

使用我当前的代码,但我实现了每个菜单项,但我的子菜单显示整个数据库中的每个产品,而不仅仅是属于该类型的产品。

我的控制器:

public function index()
{

    //get all products
    $products = Product::all();  

    //get each type
    $types = Product::distinct()->get(['Type']);

    return view('pages.getstarted')->with('products', $products)                                       
                                   ->with('types', $types);
}

我的观点:

<ul class="list-sidebar">                                
  @foreach($types as $type)
    <li class="header">
      <a href="#" data-toggle="collapse" data-target="#1">{{$type->Type}}<span class="fa fa-chevron-left pull-right"></span></a>
      <ul class="sub-menu collapse" id="1">
        @foreach($products as $product)
          <li><a href="1">{{$product->Product_Name}}</a></li>
        @endforeach
      </ul>
    </li>   
  @endforeach 
</ul>    

我对Laravel很新,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

只需使用groupBy实例中的Collection方法更改控制器和视图:

Documentation

<强>控制器

public function index()
{
    //get all products
    $products = Product::all();  

    return view('pages.getstarted')->with('products', $products);
}

查看

<ul class="list-sidebar">
    @foreach($products->groupBy('Product_Type') as $type => $subCollection)
    <li class="header">
        <a data-target="#1" data-toggle="collapse" href="#">
            {{$type}}
            <span class="fa fa-chevron-left pull-right"></span>
        </a>
        <ul class="sub-menu collapse" id="1">
            @foreach($subCollection as $product)
            <li>
                <a href="1">{{$product->Product_Name}}</a>
            </li>
            @endforeach
        </ul>
    </li>
    @endforeach
</ul>

答案 1 :(得分:-1)

$types开始执行以下操作:

    $menu = [];
    foreach ($types as $type){
      $products = Product::where('Product_Type', $type->Product_Type)->get();
       foreach ($products as $product){
          $menu[$type->Product_Type][] = $product->Product_Name;
       }
    }
return view('pages.getstarted',['menu' => $menu]);

然后在视图中:

<ul>
@foreach($menu as $type)
 <li>{{$type}}<ul>
  @foreach($type as $item)
   <li>{{$item}}</li>
  @endforeach
  </ul></li>
@endforeach
</ul>