You need to enable JavaScript to run this app. Laravel 8 使用orderBy与withMax按details表最大price排序products表
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 18:06:00