Eloquent关联结果排序问题:无需SQL RAW实现关联表排序
解决Eloquent关联模型排序问题(无需RAW语句)
没问题!你遇到的「Unknown column」错误很常见——直接在主查询的orderBy里用关联表的字段时,Eloquent会把这个排序条件加到主表(attribute_groups)的查询语句中,而主表根本没有iteration字段,自然就报错了。
不用SQL RAW语句完全可以实现关联模型的排序需求,只需要在with方法里传入闭包,给关联的attribute模型单独指定排序规则就行:
$groups = AttributeGroup::with(['attribute' => function ($query) { $query->orderBy('iteration', 'DESC'); }])->where('page_id', $page->id)->get();
原理说明
这个写法的逻辑是:
- 先执行主查询,筛选出
page_id匹配的所有AttributeGroup记录; - 再单独查询每个分组对应的
attribute数据时,自动带上orderBy('iteration', 'DESC')的条件,这样每个分组下的属性就会按你期望的降序排列了。
如果之后你需要同时对主表和关联表排序,也可以用类似的方式分别给主查询和关联查询加orderBy条件,完全不需要依赖RAW语句~
内容的提问来源于stack exchange,提问作者archvist
相关产品推荐
相关产品推荐

