编程语言
首页 > 编程语言> > php – 如何在Laravel中创建嵌套的类别列表?

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