You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel查询构建器中比较两个聚合字段

解决方案:筛选杯架数少于座椅数的车辆

你可以通过havingRaw方法直接在SQL的HAVING子句中写入自定义比较逻辑,实现两个聚合字段的对比:

Car::query()
    ->withCount('seats')
    ->withCount('cupholders')
    ->havingRaw('cupholders_count < seats_count')
    ->get();

或者也可以用having配合DB::raw实现,效果完全一致:

use Illuminate\Support\Facades\DB;

Car::query()
    ->withCount('seats')
    ->withCount('cupholders')
    ->having('cupholders_count', '<', DB::raw('seats_count'))
    ->get();

原理说明

withCount生成的seats_count和cupholders_count属于查询结果中的聚合计算列,where子句无法直接引用这类聚合结果(因为WHERE在聚合计算前执行)。而HAVING子句是在聚合计算完成后执行,正好适合用来筛选聚合结果。

havingRaw允许你直接编写原生SQL表达式,能灵活对比两个聚合字段;用DB::raw包裹seats_count,是为了告诉Laravel这是一个列名而非静态参数,避免被当作字符串处理。

内容的提问来源于stack exchange,提问作者mniess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:43:13