提问人:dgpro 提问时间:9/21/2023 最后编辑:dgpro 更新时间:9/21/2023 访问量:59
Laravel Eloquent MySQL DateTime 字段更新与 Interval 给出错误
Laravel Eloquent MySQL DateTime field update with Interval gives an error
问:
我正在尝试通过使用间隔添加 1 天来更新所有记录的 DateTime 字段,就像这样雄辩
TestModel::update(['date' => \DB::raw('DATE_ADD(date, INTERVAL 1 DAY)')]);
但是我收到这个错误
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1 near "1": syntax error (SQL: update "test" set "date" = DATE_ADD(date, INTERVAL 1 DAY))
如果我直接在 MYSQL 中使用此查询(使用 HeidiSQL),如果我删除表和字段名称周围的引号,它就可以工作,这没有意义。
update test set date = DATE_ADD(date, INTERVAL 1 DAY)
我也尝试过不使用函数,但发生了同样的错误DATE_ADD
\DB::raw('date + INTERVAL 1 DAY')
在字段周围添加引号没有任何区别。
对插入、删除、更新操作的所有其他查询都可以正常工作。 我在这里检查了类似的问题,这似乎是雄辩的正确格式,那么这里有什么问题呢?
Laravel 5.8 (我知道它已经过时了)
MySQL 8.0.34
PHP 7.4
更新:它在使用 SQLite 的单元测试中给出错误,并且不支持 INTERVAL
答:
0赞
Othmane Nemli
9/21/2023
#1
我认为你应该使用反引号(不是因为是保留字,而是通常用反引号包装列)date
TestModel::update(['date' => \DB::raw('DATE_ADD(`date`, INTERVAL 1 DAY)')]);
评论
0赞
dgpro
9/21/2023
感谢您的建议,但正如我所提到的,任何类型的报价都没有任何区别。问题出在用于单元测试的 SQLite 上,它不支持INTERVAL
0赞
Othmane Nemli
9/22/2023
@dgpro,我认为这会对您有所帮助:bannister.me/blog/using-mysql-and-postgres-functions-in-sqlite
评论
INTERVAL
INTERVAL '1' DAY
INTERVAL 1 DAY
\DB::statement()
"date"