首页 > 解决方案 > OrderBy 与 laravel eloquent 中的“关系”

问题描述

我有下表,

我试图让所有具有所有相关专业的用户按“订单”排序,每个用户在表“user_category”中的类别下。

我已经尝试过使用“与”关系,但我无法在此查询上进行排序。

有什么想法我可能会错吗?

标签: laravel

解决方案


With()我认为使用 sql 运算符 whereIn 进行多个查询,因此当您尝试对其进行 orderBy 时,您没有可用的字段。

有两种方法可以解决这个问题,

要么join()将表放在一起,然后orderBy在连接字段上,要么像这样对查询结果的集合进行排序

$sortedResult = SomeModel::with('all your relations')->get()
    ->sortByDesc(function ($anItem) {
        return $anItem->category->order;
    })->all();

如果你想加入,这里是另一个帖子:按关系值排序集合


根据评论编辑

User::join('user_category', 'user_category.user_id', '=', 'user.id')
    ->join('user_specialities', 'user_specialities.user_id', '=', 'user.id')
    ->select('user.*')
    ->selectRaw('(select group_concat(spe_name) from specialities where specialities.id = user_specialiliteies.spe_id) as specialities')
    ->orderBy('user_category.order')
    ->get();

推荐阅读