Laravel上的DATE_ADD查询显示意外结果

时间:2017-05-15 03:54:32

标签: php sql laravel

我在mySQL上有这个查询

SELECT updated_at 
FROM products
WHERE updated_at >= DATE_ADD(NOW(), INTERVAL -7 DAY)
GROUP BY day(updated_at)
ORDER BY updated_at desc

我尝试将它应用于Laravel,就像这样

$date = Products::select('updated_at')
            ->where('updated_at', '>=', 'DATE_ADD(NOW(), INTERVAL -7 DAY)')
            ->groupBy('updated_at')
            ->orderBy('updated_at', 'desc')
            ->get()

并且Laravel上的结果显示了updated_at列中的所有数据,而不仅仅是6天之前。我对Laravel的查询有什么问题,谢谢

2 个答案:

答案 0 :(得分:1)

您必须改为使用whereRaw

$date = Products::select('updated_at')
                ->whereRaw('updated_at >= DATE_ADD(NOW(), INTERVAL -7 DAY)')
                ->groupBy('updated_at')
                ->orderBy('updated_at', 'desc')
                ->get()

答案 1 :(得分:0)

另一个用例是当您需要在日期列中实际添加一个间隔并将其与now()比较时,例如将start_date之后的两天与now()比较。 您将必须完全像这样(laravel 5.7):

  • 其中“ start_date”是列名,
  • 关键字“ interval”和“ day”必须为小写(或任何其他需要的相似关键字)
  • 以及比较日期周围的括号

->whereRaw('start_date + interval 2 day >= ?', [now()]);

我在这里找到了有效的答案:https://laracasts.com/discuss/channels/eloquent/adding-days-to-a-date-in-a-where-query