Laravel中能否用DB::raw()调用MySQL ADDDATE函数?语法是否正确?
用Laravel查询构造器调用MySQL的ADDDATE()函数
嘿,你的思路完全没问题——确实可以通过Laravel查询构造器结合DB::raw()来调用MySQL的内置函数,但你的写法存在两处语法错误,导致它无法正常工作:
你原来写法的问题
- 没有把MySQL函数调用作为字符串传入
DB::raw():你直接写了ADDDATE(date_col, INTERVAL 1 DAY),PHP会把它当作PHP函数尝试执行,但这个函数在PHP中并不存在,自然会报错。 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
相关产品推荐
相关产品推荐

