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
相关产品推荐
相关产品推荐

