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

如何用Laravel Eloquent实现指定分组求和SQL查询?

Laravel Eloquent 实现按月份分组求和的正确方式

你的问题出在直接将SQL函数写在Eloquent的select和groupBy方法中——Eloquent会把MONTH(fecha)当作普通字段名解析,而非SQL函数,导致数据库报错。以下是修正方案:

解决方案1:使用DB::raw()包裹原生SQL片段

首先引入DB门面:

use Illuminate\Support\Facades\DB;

然后修改查询代码:

$cantidad_venta = Venta::select(
    DB::raw('MONTH(fecha) as mes'),
    DB::raw('SUM(precio_total) as suma_precio')
)
->groupBy(DB::raw('MONTH(fecha)'))
->get();

return response()->json($cantidad_venta);

解决方案2:用selectRaw()和groupByRaw()简化写法

Laravel提供了更简洁的原生SQL方法,无需重复调用DB::raw():

$cantidad_venta = Venta::selectRaw('MONTH(fecha) as mes, SUM(precio_total) as suma_precio')
    ->groupByRaw('MONTH(fecha)')
    ->get();

return response()->json($cantidad_venta);

关键说明

  • DB::raw()/selectRaw()/groupByRaw()的作用是告诉Eloquent:这是原生SQL片段,不要当作字段名处理,从而生成你需要的原始SQL语句。
  • 额外查询MONTH(fecha) as mes是为了让返回结果包含对应的月份,方便前端识别每个求和值所属的月份。
  • 若使用PostgreSQL等其他数据库,需将MONTH(fecha)替换为对应数据库的月份提取函数(如EXTRACT(MONTH FROM fecha))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:54:58