Laravel 8 使用orderBy与withMax按details表最大price排序products表
Laravel 8 一对多关联按关联表最大值排序实现方案
首先确保你已经在Product模型中正确定义了和Detail模型的一对多关联:
// app/Models/Product.php public function details() { return $this->hasMany(Detail::class); }
接下来直接使用withMax+orderBy即可实现需求:
$products = Product::withMax('details', 'price') // 按关联details的最大price倒序排序,如需正序把desc改为asc ->orderBy('details_max_price', 'desc') ->get();
如果你需要排除没有关联详情的产品,可追加whereHas条件:
$products = Product::withMax('details', 'price') ->whereHas('details') ->orderBy('details_max_price', 'desc') ->get();
原理解释
withMax('details', 'price')会自动生成子查询,为每个产品计算关联详情的最大price值,最终给查询结果追加名为details_max_price的属性- 直接对
details_max_price字段执行orderBy排序即可,完全符合Laravel 8的语法规范,无需额外自定义SQL
内容的提问来源于stack exchange,提问作者farsheed ahmadian
相关产品推荐
相关产品推荐

