我想基于第二层雄辩关系生成树
我有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
谢谢,我真的不知道解决这个问题..
答案 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
干杯。