表
+---------+-----------+-----------+ | id | name | parent_id | +---------+-----------+-----------+ | 1 | Supports | 0 | | 2 | Mobile | 0 | | 3 | Outdoor | 1 | | 4 | Samsung | 2 | | 5 | Cricket | 3 | | 6 | Team A | 5 | +---------+-----------+-----------+
分类模型
class Categories extends Model {
public $table = "categories";
protected $fillable = ['name', 'parent_id', 'status'];
public function parentCat() {
return $this->belongsTo(Categories::class, 'parent_id');
}
public function childrenCat() {
return $this->hasMany(Categories::class, 'parent_id');
}
}
控制器方法
Categories::where('parent_id', $parent_id)->orderBy('name', 'ASC')->get();
问题
我想显示带有类别和子类别的面包屑,如果我正在查看板球子类别,例如:
主页 - >支持 - >户外 - >蟋蟀
问题二
删除主要分类时如何删除所有子类别。例如,如果我删除户外,那么Cricket和A队应该删除
答案 0 :(得分:1)
首先考虑将您的类别结构更改为Nested Set model。处理嵌套类别(以及其他结构)更好更有效。这是Laravel的好包装:
https://github.com/etrepat/baum
对于您的示例,只有不是特别优化的解决方案。当您查询叶子类别时:
$category = Categories::where('parent_id', $parent_id)
->orderBy('name', 'ASC')
->first();
return view({your view here}, compact('category'));
您需要部分视图(例如:breadcrumb.blade.php
),其中包含以下部分:
<ul>
@section('breadcrumb')
@show
</ul>
在主要行动中,你可以做一些这样的想法:
@section('breadcrumb')
<li>{{$category->name}}</li>
@stop
@while($parent = $category->parent)
@section('breadcrumb')
@parent
<li>{{$parent->name}}</li>
@stop
@endwhile
<强>注意强>
但正如我在开头说的那样 - 这是非常次优的解决方案,因为你必须为每个父级调用查询,所以只有你没有多少嵌套级别才能正常。