laravel - OrderBy 与 laravel eloquent 中的“关系”
问题描述
我有下表,
- 用户(ID,姓名)
- 类别(id、category_name、顺序)
user_category (id, user_id, category_id)
专业(id,spe_name)
- user_specialities (id, spe_id, user_id)
我试图让所有具有所有相关专业的用户按“订单”排序,每个用户在表“user_category”中的类别下。
我已经尝试过使用“与”关系,但我无法在此查询上进行排序。
有什么想法我可能会错吗?
解决方案
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();
推荐阅读
- thymeleaf - Thymeleaf 单选按钮 th:field 检查验证
- javascript - 比较 IndexedDB 中两个不同存储的值
- android - 如何使用 Room 检测 UPDATE sql 查询是否成功?
- osmnx - 将清理后的交点保存到 shapefile
- mysql - 更多列或一个数组,什么是更好的性能?
- firebase - 为什么 firebase serve 命令显示“Cannot GET /”?firebase+nuxt+express
- java - RedisTemplate 保存多个键值对到散列问题
- python - 访问数组中的数组元素
- javascript - 是否可以添加一个功能以单击展开和/或折叠所有手风琴?
- javascript - JS报错:为什么系统找不到我的js文件