使用Laravel 5.1,我试图从MySQL类别表创建菜单列表。我的服务提供者返回数据,但我不知道如何在foreach循环中创建子类别。当我执行循环时,只返回子查询的最后一行。任何指导将不胜感激。
类别表
id | cat_name | cat_parent_id
--- | --------------| -------------
1 | Parent Cat 1 | NULL
2 | Parent Cat 2 | NULL
3 | Child Cat 1 | 2
4 | Child Cat 2 | 2
5 | Parent Cat 3 | NULL
6 | Child Cat 3 | 5
预期结果
Parent Cat 1
Parent Cat 2
Child Cat 1
Child Cat 2
Parent Cat 3
Child Cat 3
viewComposerServiceProvider.php
public function boot()
{
$this->composeTopCategoryNavigation();
$this->composeSubCategoryNavigation();
}
private function composeTopCategoryNavigation()
{
view()->composer('partials.header', function($view)
{
$view->with('top_cats', Category::whereNull('cat_parent_id')->orderBy('cat_name', 'asc')->get());
});
}
private function composeSubCategoryNavigation()
{
view()->composer('partials.header', function($view)
{
$view->with('sub_cats', Category::whereNotNull('cat_parent_id')->orderBy('cat_name', 'asc')->get());
});
}
表头视图
<ul>
@foreach ($top_cats as $top_cat)
<?php $top_cat_slug = str_slug( $top_cat->cat_name, "-"); ?>
<li>{{ $top_cat->cat_name }}
@foreach ($sub_cats as $sub_cat)
@if ( $sub_cat->cat_parent_id === $top_cat->id )
<ul>
<li{{ $sub_cat->cat_name }}</li>
</ul>
@endif
@endforeach
</li>
@endforeach
</ul>
3条答案
按热度按时间carvr3hs1#
首先,你所做的是低效的。您的视图遍历每个父类别的所有子类别。如果您正确地定义了关系,并利用了Eloquent的快速加载,那么您就可以以更简单的方式获取和访问子类别。
从定义关系开始:
一旦你正确定义了关系,你就可以像下面这样获取整个类别树:
不需要第二个composer,因为父类别已经包含子类别。
现在,您只需要在视图中显示类别:
w7t8yxp52#
我自己找到了解决办法。我必须遍历结果才能访问成员变量。
jc3wubiy3#
类别型号:
取树层次结构: