Laravel 4查询30天前的情况

时间:2015-08-06 10:04:44

标签: php mysql laravel laravel-4

我不明白哪里出错了。当我添加这个

  

where('units.solddate','> =','DATE_SUB(CURDATE(),INTERVAL 30 DAY)')

where子句和我的结果为空。我试过phpMyadmin,它确实返回结果。

$query= (tables)
        ->select(DB::raw('SUM(units.price) as price, DATE(units.solddate) as date, DAY(units.solddate) as day'))
        ->where('units.solddate','>=','DATE_SUB(CURDATE(), INTERVAL 30 DAY)')
        ->where('units.solddate','<=','NOW()')
        ->groupBy('date')
        ->get();

请建议。

1 个答案:

答案 0 :(得分:2)

约束不起作用的原因是Eloquent采用您与字面比较的值,在需要时将其转义然后在查询中使用。所以,如果你这样做

->where('units.solddate','<=','NOW()')
实际上,您将 units.solddate 与strin NOW()进行比较,例如:

... WHERE units.solddate <= 'NOW()'

如果要在查询中使用MySQL函数,则必须明确告诉Eloquent / QueryBuilder您是指通过使用 DB :: raw()来包装值所提供的原始值。

以下内容对您有用:

->where('units.solddate','>=',DB::raw('DATE_SUB(CURDATE(), INTERVAL 30 DAY)'))
->where('units.solddate','<=',DB::raw('NOW()'))