php – 如何在Laravel中创建嵌套的类别列表?
作者:互联网
如何在Laravel中创建嵌套的类别列表?
我想创建以下示例:
> — Php
> —— Laravel
> ———版本
> ————系列
> — Python
> —— Django
> — Ruby
> ……….
我的表的字段是:
ID | Name | Parent_id
如果我必须在深度上添加另一列到我的表中,请告诉我.
我正在使用以下代码,但我认为它不是创建嵌套列表类别的最佳解决方案,我不能将此函数传递给我的视图:
function rec($id)
{
$models = Category::find($id);
foreach ($models->children as $chield) {
rec($chield->id);
}
return $models->all();
}
function main () {
$models = Category::whereNull('parent_id')->get();
foreach ($models as $parent) {
return rec($parent->id);
}
解决方法:
你可以做一个自我指涉的模型:
class Category extends Model {
public function parent()
{
return $this->belongsTo('Category', 'parent_id');
}
public function children()
{
return $this->hasMany('Category', 'parent_id');
}
}
并建立递归关系:
// recursive, loads all descendants
public function childrenRecursive()
{
return $this->children()->with('childrenRecursive');
}
并让父母带着他们所有的孩子:
$categories = Category::with('childrenRecursive')->whereNull('parent')->get();
最后,您需要遍历子项,直到子项为空.如果你不小心,肯定会遇到一些性能问题.如果这是一个相当小的数据集,您计划保持这种方式,那么它应该不是问题.如果这将成为一个不断增长的列表,那么有一个root_parent_id或其他东西来查询和手动组装树可能是有意义的.
标签:nested-lists,php,laravel 来源: https://codeday.me/bug/20190724/1523070.html