查询在Laravel 4中检索特定日期范围的数据记录

时间:2014-07-01 21:47:19

标签: laravel laravel-4 eloquent query-builder

我有一张包含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查询中使用的其他函数。

2 个答案:

答案 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方法。但它应该工作。这是未经测试的,但它应该非常接近。