Php 日期\在Laravel上添加查询显示意外结果

Php 日期\在Laravel上添加查询显示意外结果,php,sql,laravel,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 我试着把它用在拉威尔身上 $date = Products::select('updated_at') ->where('updated_at', '>='

我在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
我试着把它用在拉威尔身上

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

Laravel上的结果显示所有数据都在更新栏中,而不仅仅是6天前。我在Laravel上的查询有什么问题吗,谢谢

您必须使用
whereRaw

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

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

  • 其中“开始日期”是列名
  • 关键字“interval”和“day”必须为小写(或任何其他类似的所需关键字)
  • 比较日期和括号
->whereRaw('start_date+interval 2 day>=?',[now()])


我在这里找到了有效的答案:

谢谢,我想选择更新日期,怎么做?我想你可以使用
Products::select('updated_at',DB::raw('day(updated_at)as day'))
->whereRaw('start_date + interval 2 day >= ?', [now()]);