Laravel查询orderBy嵌套关系

xytpbqjk  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(127)

我有以下关系:
单位(有多个)-〉用户-〉(属于)-〉职位
我正在尝试返回一个包含用户的单元数组,其中用户按其位置排序。位置模型中的属性是“order”,我希望将其用作排序字段。我尝试了以下操作:

return Unit::query()->ordered()->with(['users' => function($query) {
    $query->with(['position' => function($query) {
        $query->orderBy('order');
    }]);
}])->get();
wz3gfoph

wz3gfoph1#

仅使用with()方法不能按嵌套关系排序,需要先连接关系,因此代码应为:

return Unit::query()->ordered()->with([
    'users' => function ($query) {
        $query->join('positions', 'positions.id', '=', 'users.position_id');
        $query->orderBy('positions.order');
    }
])->get();

另一种方法是使用laravel集合sortBy排序

$ordered_units = Unit::query()->ordered()->with(['users' => function($query) {
    $query->with(['position' => function($query) {
        $query->orderBy('order');
    }]);
}])->get();
return $ordered_units->sortBy('users.position.order');

相关问题