Laravel Elloquent,排序关系使它成为树

时间:2018-02-23 07:58:21

标签: laravel eloquent relation laravel-eloquent

我想基于第二层雄辩关系生成树

我有3个表:

  

用户(id,name)

     

发布(id,parent_id,name)

     

类别(user_id,post_id)

我有样本表,如:

用户

  

id |名称

     

1 | John Doe

发表

  

id | parent_id |名称

     

1 | 0 | POSTA

     

2 | 1 |帖子A.1

     

3 | 4 |发布B.1

     

4 | 0 |发布B

分类

  

user_id | post_id

     

1 | 1

     

1 | 2

     

1 | 3

     

1 | 4

我的问题是,如何从用户对帖子进行排序以获取树?

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

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

@endfor

我希望结果如下:

  • POSTA

  • 发布A.1

  • 发布B(非发布B.1)

  • 发布B.1

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

2 个答案:

答案 0 :(得分:0)

您已经非常规地命名了您的数据透视表,但此代码可以帮助您。 首先尝试将子关系添加到帖子模型中:

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

这种实用方法适用于n个孩子的n个类别

首先创建一个部分视图category.blade.php文件,该文件以递归方式调用自身以加载其子项

<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>

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

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

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

            @include('category', $category)

        @endif

    @endforeach
</ul>

答案 1 :(得分:0)

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

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

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

干杯。