Laravel:如何在WHERE子句中使用DATE_ADD实现日期比较?
解决方案
完全可以实现你的需求,但你当前的代码写法存在几个问题,下面是修正后的实现方式:
问题分析
你提供的代码有三个核心错误:
- DATE_ADD参数顺序错误:MySQL的
DATE_ADD语法是DATE_ADD(日期表达式, INTERVAL 数值 单位),你把单位、数值、字段的顺序搞反了 - 多余的HTML转义字符:代码里的
"是不必要的,直接写字段名和单位即可 - 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
相关产品推荐
相关产品推荐

