Laravel 雄辩,排序关系使其成为树

Laravel Elloquent, Sort relation to make it tree

我想根据第二层的关系生成树

我有 3 个 table 是:

User (id, name)

Post (id, parent_id, name)

Category (user_id,post_id)

我有样本 table 比如:

用户

id | name

1 | John Doe

Post

id | parent_id | name

1 | 0 | PostA

2 | 1 | Post A.1

3 | 4 | Post B.1

4 | 0 | Post B

类别

user_id | post_id

1 | 1

1 | 2

1 | 3

1 | 4

我的问题是,如何从用户中排序 post 以获得树?

@foreach($user->categories as $category)

  {{$category->post->name}}

@endfor

我希望结果是:

谢谢,我真的不知道怎么解决这个问题..

您以不同寻常的方式命名了枢轴 table,但此代码会对您有所帮助。 首先尝试将 children 关系添加到您的 post 模型:

public function children()
{
    return $this->hasMany(Post::class,'parent_id','id');
}

这种实用的方法适用于 n 个类别,n 个 children

首先创建一个局部视图 category.blade.php 文件,该文件将递归调用自身以加载其 children

<li>
   @if ($category->post->children()->count() > 0 )
       <ul>
           @foreach($category->post->->children as $category)

                   @include('category', $category) //the magic is in here

           @endforeach
       </ul>
   @endif
</li>

然后在主视图中添加此代码以递归方式加载所有 children

<ul>
    @foreach ($user->categories as $category)

        @if($category->post->parent_id == 0 )

            @include('category', $category)

        @endif

    @endforeach
</ul>

一个可能的智能解决方案(在任何其他解决方案中,例如从数据库中过滤)可能只是对 $user->categories 结果集合进行排序。 Eloquent 集合有一个方法:

@foreach($user->categories->sortBy('name') as $category)

Link 到官方文档: https://laravel.com/docs/5.6/collections#method-sortby

干杯。