Laravel 关联模型按照关联表排序
本文最后更新于 2421 天前(2016-10-4),其中的信息可能已经有所发展或者不再适用于现阶段。
本文全长 268 字,全部读完大约需要 1 分钟。
这里讨论的是一对多模型按照父表字段排序的问题
例:
- 表 users字段 id
- 字段 group_id
- 表 groups
- 字段 id
- 字段 family_id
现在要将取出的 user 按照 family_id 排序
定义了模型关联
public function group()
{
return $this->belongsTo('App\Group');
}
Laravel 文档里给出了一种似乎是这个问题的方法
$users = User::with(['group' => function ($query) {
$query->orderBy('family_id', 'asc');
}])->get();
然而这种方法针对的是 hasMany 关联,对 belongsTo 不好使。
也就是说它实际上只会对每个 user 里的 group 里的元素按照 family_id 排序,而并不会对 user 进行排序。
然后我 baidu 了好久,又 google 了好久
得出一个结论,Eloquent 模型尚无此功能TAT
解决方案如下
$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();
问这类问题的人不多,笔者参考的文章回答也大多是在一年前。如果有更好的解决方案,欢迎在这篇文章下评论QwQ