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

Laravel计算两列差值之和报错:未知hours_difference列

解决Laravel withSum计算时间差总和报错问题

报错提示Column not found: 1054 Unknown column 'absences.hours_difference' in 'field list',根源是你在withSum的第二个参数里直接引用了子查询临时定义的别名hours_difference,但Laravel的withSum会默认去absences表中查找这个物理列,而这个列实际上并不存在。

下面是两种可行的解决写法:

写法一:直接在withSum中定义聚合表达式

$classesAbsences = Classes::withSum(
    'absences',
    'TIMESTAMPDIFF(HOUR, `from`, `to`) as hours_difference'
)->get();

执行后,每个Classes实例会多出一个hours_difference_sum属性,对应所有关联缺勤记录的时长总和。

写法二:带额外条件的关联查询

如果需要给缺勤记录加过滤条件(比如只统计近一个月的),可以这么写:

$classesAbsences = Classes::withSum([
    'absences as total_absent_hours' => function ($query) {
        $query->where('from', '>=', now()->subMonth())
              ->selectRaw('TIMESTAMPDIFF(HOUR, `from`, `to`)');
    }
])->get();

这种写法会把结果存储在total_absent_hours_sum属性里,同时满足自定义过滤需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:50:00