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
我希望结果是:
Post一个
Post A.1
Post B(不是 Post B.1)
Post B.1
谢谢,我真的不知道怎么解决这个问题..
您以不同寻常的方式命名了枢轴 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
干杯。
我想根据第二层的关系生成树
我有 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
我希望结果是:
Post一个
Post A.1
Post B(不是 Post B.1)
Post B.1
谢谢,我真的不知道怎么解决这个问题..
您以不同寻常的方式命名了枢轴 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
干杯。