laravel 怎么用关联表的字段排序?
不用左右链接!
有什么方法可以直接排序的?
having(),然后orderBy()好像不行
例:
现在要将取出的 user 按照 family_id 排序
定义了模型关联
1
2
3
4
|
public function group()
{
return $this->belongsTo('App\Group');
}
|
Laravel 文档里给出了一种似乎是这个问题的方法
1
2
3
|
$users = User::with(['group' => function ($query) {
$query->orderBy('family_id', 'asc');
}])->get();
|
然而这种方法针对的是 hasMany 关联,对 belongsTo 不好使。
也就是说它实际上只会对每个 user 里的 group 里的元素按照 family_id 排序,而并不会对 user 进行排序。
然后我 baidu 了好久,又 google 了好久
得出一个结论,Eloquent 模型尚无此功能TAT
解决方案如下
1
2
3
4
|
$users = User::select(DB::raw('groups.*'))
->leftJoin(DB::raw('(select id, family_id from groups) as group'), 'group.id', '=', 'users.group_id')
->orderBy('family_id', 'asc')
->get();
|
我知道左连接可以,我想问问除了这个还有被的方法吗?
eloquent 模型定义方法
public function items() : HasMany
{
...
}
使用查询,并生序排序,这里使用集合方法
$special->items->sortBy('sort')