You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何在WHERE子句中使用DATE_ADD实现日期比较?

解决方案

完全可以实现你的需求,但你当前的代码写法存在几个问题,下面是修正后的实现方式:

问题分析

你提供的代码有三个核心错误:

  1. DATE_ADD参数顺序错误:MySQL的DATE_ADD语法是DATE_ADD(日期表达式, INTERVAL 数值 单位),你把单位、数值、字段的顺序搞反了
  2. 多余的HTML转义字符:代码里的"是不必要的,直接写字段名和单位即可
  3. whereRaw参数使用错误:比较运算符<=应该写在SQL语句中,而不是作为whereRaw的第二个参数

正确实现方式

方式1:使用DATE_SUB(更直观,适合减法场景)

$valid_status_query->whereRaw('DATE_SUB(date_to, INTERVAL 3 DAY) <= ?', [Carbon::now()->format('Y-m-d')]);

方式2:使用DATE_ADD(通过负数实现减法)

$valid_status_query->whereRaw('DATE_ADD(date_to, INTERVAL -3 DAY) <= ?', [Carbon::now()->format('Y-m-d')]);

方式3:Laravel查询构造器风格写法

如果偏好更贴合Laravel的写法,可以结合whereDate和DB::raw:

use Illuminate\Support\Facades\DB;

$valid_status_query->whereDate(DB::raw('DATE_SUB(date_to, INTERVAL 3 DAY)'), '<=', Carbon::now()->format('Y-m-d'));

效果验证

当date_to字段值为2022-07-20时,上述代码会生成SQL条件:DATE_SUB(date_to, INTERVAL 3 DAY) <= '当前日期',其中DATE_SUB(date_to, INTERVAL 3 DAY)计算结果为2022-07-17,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Zain Farooq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:36:28