如何结合orderBy与多预加载关联关系实现差异化排序?
Laravel 预加载关联时分别设置排序规则
你可以通过给with()方法传递数组的方式,为每个需要排序的关联关系单独定义查询逻辑,在闭包里使用orderBy()指定排序规则:
$model = $class::where('id', $id) ->with([ 'brand', 'images' => function ($query) { // 按priority字段升序排序,需要降序就换成'desc' $query->orderBy('priority', 'asc'); }, 'price' => function ($query) { // 按price字段升序排序 $query->orderBy('price', 'asc'); } ]) ->firstOrFail();
关键说明:
- 数组的键对应关联关系的名称(比如
images、price),值是一个闭包函数,用来定制该关联的查询 - 不需要排序的关联(比如
brand),直接保留关联名称即可,无需额外处理 - 可根据业务需求修改
orderBy()的第二个参数,asc是升序,desc是降序
内容的提问来源于stack exchange,提问作者Kos-Mos
相关产品推荐
相关产品推荐

