Laravel 11配置自定义MariaDb Grammar支持Carbon微秒时间戳时调用toRawSql()崩溃的解决方法咨询
Laravel 11配置自定义MariaDb Grammar支持Carbon微秒时间戳时调用toRawSql()崩溃的解决方法咨询
我最近在做一个Laravel 11项目,想要实现把微秒级时间戳存入MariaDB的timestamp字段里。
按照Carbon的Laravel相关指引,我先创建了自定义的Grammar类,代码如下:
<?php namespace App\Database\Query\Grammars; use Illuminate\Database\Query\Grammars\MariaDbGrammar as IlluminateMariaDbGrammar; class MariaDbGrammar extends IlluminateMariaDbGrammar { public function getDateFormat(): string { return 'Y-m-d H:i:s.u'; } }
接着我在AppServiceProvider.php里添加了一行代码,用来设置查询语法:
DB::connection()->setQueryGrammar(new \App\Database\Query\Grammars\MariaDbGrammar());
为了测试效果,我在console.php里写了一个简单的Artisan命令:
Artisan::command('raw', function () { dd(DB::table('user')->where('id_user', 'abc')->toRawSql()); });
但是当我运行php artisan raw命令时,程序直接崩溃了,抛出了如下异常:
RuntimeException The database driver's grammar implementation does not support escaping values. at vendor/laravel/framework/src/Illuminate/Database/Grammar.php:238 [truncated] +1 vendor frames 2 [internal]:0 Illuminate\Database\Query\Grammars\Grammar::Illuminate\Database\Query\Grammars\{closure}() +2 vendor frames 5 routes/console.php:84 Illuminate\Database\Query\Builder::toRawSql()
如果我把AppServiceProvider.php里设置查询语法的那行代码注释掉,程序就能正常运行了,输出的SQL语句是:
"select * from `user` where `id_user` = 'abc'" // routes/console.php:84
想请教一下,在Laravel 11应用中,正确开启MariaDB数据库微秒时间戳支持的方式应该是什么呢?
备注:内容来源于stack exchange,提问作者Gear8538
相关产品推荐
相关产品推荐

