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

Laravel关联查询:如何统计指定日期区间内车辆的燃油总成本?

解决Laravel中关联模型指定日期范围的求和问题

你的代码问题出在withSum的参数格式上,Laravel的withSum方法对于带条件的关联求和,正确的写法有两种:

写法一:使用第三个参数传递查询闭包

直接指定关联关系、求和字段,再用闭包添加日期范围条件:

$vehicles = Vehicle::withSum('fuels', 'cost', function ($query) use ($start, $end) {
    $query->whereBetween('date', [$start, $end]);
})->get();

写法二:使用嵌套数组格式

把关联关系作为数组键,对应值是包含求和字段和查询闭包的子数组:

$vehicles = Vehicle::withSum([
    'fuels' => [
        'cost' => function ($query) use ($start, $end) {
            $query->whereBetween('date', [$start, $end]);
        }
    ]
])->get();

结果获取

查询完成后,每个Vehicle实例会自动生成一个名为fuels_sum_cost的属性,直接访问就能得到该车辆在指定日期范围内的燃油总成本:

foreach ($vehicles as $vehicle) {
    echo "车辆ID {$vehicle->id} 的燃油总成本:{$vehicle->fuels_sum_cost}";
}

注意事项

  • 确保$start和$end的日期格式与fuels表中date字段的格式一致(比如都是Y-m-d格式的字符串,或者时间戳),否则会出现查询结果为空的情况。
  • 如果部分车辆在指定日期范围内没有燃油记录,fuels_sum_cost会返回null,可以用$vehicle->fuels_sum_cost ?? 0来处理为0值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:56:04