我尝试使用数据库在我网站的侧边栏上添加菜单项。我的数据库结构如下:
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很新,所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
只需使用groupBy
实例中的Collection
方法更改控制器和视图:
<强>控制器强>
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>