我在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的查询有什么问题,谢谢
答案 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):
->whereRaw('start_date + interval 2 day >= ?', [now()]);
我在这里找到了有效的答案:https://laracasts.com/discuss/channels/eloquent/adding-days-to-a-date-in-a-where-query