我希望我的SQL看起来像:
SELECT ptype, sum(money) FROM `payments` WHERE YEAR(created_at) = 2016 GROUP BY ptype
我正在努力推进" 年(created_at)= 2016 "进入Laravel Eloquent查询构建器......
尝试了不同的选择:
$data = \EPA\Models\Payments::where('YEAR(created_at)', '=', intval($period))
->groupBy('ptype')->get();
并使用DB :: raw:
$data = \EPA\Models\Payments::where(DB::raw('YEAR(created_at)'), '=', intval($period))
->groupBy('ptype')->toSql();
这给了我错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'YEAR(created_at)'
in 'where clause' (SQL: select * from `payments` where `YEAR(created_at)` = 2016 group by `ptype`)
或SQL之类:
select * from `payments` where YEAR(created_at) = ? group by `ptype`
这也不适合我,因为where子句的第三个参数被替换为"?"突然...
事实上,问题在于,在一种情况下它逃脱了YEAR(...)而MySQL认为它是一个列,而在第二种方式中,Eloquent放置了#34;?"而不是一年。
有人可以帮助将这个where子句与函数集成到雄辩中吗?这样做的最佳方式是什么? (我的报告脚本需要它)
答案 0 :(得分:2)
在评论中回答 Mark Baker ,我可以使用" whereRaw"解决方案:
$data = \EPA\Models\Payments::selectRaw('ptype, sum( money )')
->whereRaw('YEAR(created_at) = '. intval($period))
->groupBy('ptype')->get();