在laravel雄辩中与``关系''一起

时间:2018-12-13 15:46:51

标签: laravel

我有下表,

  • 用户(ID,名称)
  • 类别(ID,类别名称,顺序)
  • user_category(ID,user_id,category_id)

  • 特色(id,spe_name)

  • user_specialities(id,spe_id,user_id)

我正在尝试按表中“用户”的每个用户在表“ user_category”中的类别下的所有类别来获取所有具有所有相关专业的用户。

我尝试使用'with'关系,但无法在此查询上排序。

有什么想法我可能做错了吗?

1 个答案:

答案 0 :(得分:0)

With()使用sql运算符进行多个查询,其中我认为,因此,当您尝试对它排序时,该字段不可用。

有两种解决方法,

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

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

如果您想加入,请参阅另一篇文章:Sort collection by relationship value


根据评论进行编辑

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();