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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:18:09