我有一张包含record_date
和相应amount
字段的表格。我试图按日期的几个月检索总金额分组。
我是laravel的新手在普通的PHP中,我会使用以下的mysql查询 - >
SELECT MONTH(record_date),YEAR(record_date),SUM(amount)
FROM table_name
WHERE record_date > DATE_SUB(now(), INTERVAL 6 MONTH)
> GROUP BY YEAR(record_date), MONTH(record_date);
这只是返回过去6个月收集的总金额,每个月按月份和年份分组。
04 | 2014 | 200.00
06 | 2014 | 500.00
08 | 2014 | 100.00
我已阅读Laravel eloquent文档,但无法找到与我正在尝试运行的查询等效的内容。我不知道这是否正确,但最接近上述查询,我遇到的是
$data = SOME_MODEL::whereBetween('record_date', array(01, 12))->get();
但不确定它是否接近我想做的事情
问题是文档没有给出像now()这样的日期函数以及我们通常在mysql查询中使用的其他函数。
答案 0 :(得分:2)
您需要一个raw
查询,您可以尝试这个(未经测试但应该有效):
$data = DB::table('table_name')
->select(DB::raw('MONTH(record_date) as m, YEAR(record_date) as y, SUM(amount) as t'))
->whereRaw('record_date > DATE_SUB(now(), INTERVAL 6 MONTH)')
->groupBy(DB::raw('YEAR(record_date), MONTH(created_at)'))
->get();
答案 1 :(得分:1)
我会避免将Eloquent用于更复杂的查询,例如此类。坚持使用查询构建器:
$data = DB::table('table_name')
->select(DB::raw('MONTH(record_date)'),DB::raw('YEAR(record_date)'),DB::raw('SUM(amount)'))
->where('record_date', '>', DB::raw('DATE_SUB(now(), INTERVAL 6 MONTH)'))
->groupBy(DB::raw('YEAR(record_date)'))
->groupBy(DB::raw('MONTH(record_date)'))
->get();
不幸的是,由于您使用了如此多的MySQL函数,因此需要添加许多DB::raw
方法。但它应该工作。这是未经测试的,但它应该非常接近。