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

Laravel中能否用DB::raw()调用MySQL ADDDATE函数?语法是否正确?

用Laravel查询构造器调用MySQL的ADDDATE()函数

嘿,你的思路完全没问题——确实可以通过Laravel查询构造器结合DB::raw()来调用MySQL的内置函数,但你的写法存在两处语法错误,导致它无法正常工作:

你原来写法的问题

  1. 没有把MySQL函数调用作为字符串传入DB::raw():你直接写了ADDDATE(date_col, INTERVAL 1 DAY),PHP会把它当作PHP函数尝试执行,但这个函数在PHP中并不存在,自然会报错。
  2. DB::raw()的括号未闭合:你少写了一个闭合的),导致语法不完整。

修正后的正确写法

把整个MySQL函数调用用引号包裹成字符串,传入DB::raw(),同时补全括号:

DB::table('my_table')
    ->where('id', $the_id)
    ->update([
        'date_col' => DB::raw('ADDDATE(date_col, INTERVAL 1 DAY)')
    ]);

额外说明

这样执行后,生成的SQL和你最初的原生SQL完全一致。需要注意的是:

  • DB::raw()中的内容不会被Laravel转义,所以要确保你没有在其中直接拼接用户输入(你这里的$the_id是通过where()方法绑定的,已经做了参数绑定,避免了SQL注入,这点做得很好)。
  • 如果你更喜欢更“Laravel化”的写法,也可以使用Illuminate\Database\Query\Expression类(DB::raw()其实就是它的快捷方式),效果是一样的:
use Illuminate\Database\Query\Expression;

DB::table('my_table')
    ->where('id', $the_id)
    ->update([
        'date_col' => new Expression('ADDDATE(date_col, INTERVAL 1 DAY)')
    ]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:34:48