Laravel 关联模型按照关联表排序

梨子2016-10-4
本文最后更新于 1104 天前(2016-10-4),其中的信息可能已经有所发展或者不再适用于现阶段。
本文全长 264 字,全部读完大约需要 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

除特殊说明以外,本网站文章采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。