0

基本上我完全被这个问题难住了。我在 Laravel 中有一个这样定义的模型

class BlogCategory extends Model
{
    protected $table = 'blog_categories';

    protected $fillable = [
    'parent_id',
    'title',
    'slug'];

    public function parent()
    {
        return $this->belongsTo('App\Models\BlogCategory','parent_id','blog_category_id');
    }
    public function children()
    {
    return $this->hasMany('App\Models\BlogCategory','blog_category_id','parent_id');
    }
}

现在你可以看到这个模型可以和它自己有父子关系。

现在我使用的引导树视图需要的是我的数据格式如下:

var tree = [
        {
            text: "Parent 1",
            nodes: [
                {
                    text: "Child 1",
                    nodes: [
                        {
                            text: "Grandchild 1"
                        },
                        {
                            text: "Grandchild 2"
                        }
                    ]
                },
                {
                    text: "Child 2"
                }
            ]
        },
        {
            text: "Parent 2"
        },
        {
            text: "Parent 3"
        },
        {
            text: "Parent 4"
        },
        {
            text: "Parent 5"
        }
    ];

我怎样才能达到预期的结果?

4

2 回答 2

0

您不必使用关系来制作这棵树。只需选择所有BlogCategory模型并递归迭代它们即可制作一棵树。

例如,您可以使用此处的答案递归函数从数据库结果生成多维数组并根据您的需要采用它。

于 2015-10-23T09:52:36.790 回答
0

我想出了与 L-5.2 类似的情况,如果你想在多个级别显示类别,其中为多级类别维护单个表,我想这会很有用。

id | category_id | name
1      NULL        Main Category
2       1           -Sub-Category
3       1           -Sub Child
4      Null        Second Main
5       4           -Second Sub

在类别模型中

public function subcategory()
{
    return $this->hasMany(Category::class);
}

然后在 Controller 或您需要列出的任何地方:

$categories = \App\Category::where('category_id', null)->get();

然后,您可以在视图中使用它:

<ul>
@foreach($categories as $category)
    <li>{{ $category->name }}
        @if(count( $category->subcategory) > 0 )
            <ul>
            @foreach($category->subcategory as $subcategory)
                <li>{{ $subcategory->name }}</li>
 {{-- If you want upto 3 level, then you can repeat above code with if condition here --}}
            @endforeach 
            </ul>
        @endif
    </li>                   
@endforeach
</ul>

这看起来像这样:

  • 主要类别
  • --子类
  • --子子
  • 第二主
  • --第二个子

让我知道这是否有帮助。谢谢

于 2016-09-01T19:12:03.117 回答