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

Laravel Passport安装日期格式报错及全局日期格式修改需求

解决Laravel Passport安装时SQL Server日期格式转换错误

我之前也遇到过Laravel搭配SQL Server安装Passport时的这个日期格式问题,折腾了好一会儿才找到全局解决的办法,不用逐个修改模型,分享给你:

问题根源

SQL Server默认的日期存储格式是Ydm H:i:s(比如20240520 14:30:00),但Laravel的Carbon组件默认输出的日期格式是Y-d-m H:i:s(比如2024-05-20 14:30:00),这就导致执行php artisan passport:install时,插入oauth相关表的日期字段会触发「nvarchar转datetime超出范围」的错误。

全局解决方案(二选一即可)

方法1:通过AppServiceProvider全局配置Carbon和模型日期格式

这是最直接的全局修改方式,一次配置所有模型和Carbon实例:

  1. 打开项目根目录下的app/Providers/AppServiceProvider.php文件
  2. 在boot()方法中添加以下代码:
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;

public function boot()
{
    // 让Carbon序列化时使用SQL Server兼容的日期格式
    Carbon::serializeUsing(function ($carbon) {
        return $carbon->format('Ymd H:i:s');
    });

    // 全局设置所有Eloquent模型的默认日期格式
    Model::setDateFormat('Ymd H:i:s');
}

方法2:配置SQL Server数据库连接的日期格式

也可以直接在数据库配置中指定SQL Server的日期格式,让Laravel驱动自动适配:

  1. 打开config/database.php文件,找到connections数组下的sqlsrv配置项
  2. 添加date_format参数:
'sqlsrv' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_HOST', 'localhost'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    // 指定SQL Server兼容的日期格式
    'date_format' => 'Ymd H:i:s',
],

验证修复效果

配置完成后,先清理Laravel的配置缓存,避免旧配置干扰:

php artisan config:clear
php artisan cache:clear

然后重新执行Passport安装命令:

php artisan passport:install

这样就能顺利完成安装,不会再出现日期格式转换的错误了。另外,如果你之前手动给个别模型设置过$dateFormat属性,全局配置会自动覆盖这些单独设置,不需要再保留那些代码。

内容的提问来源于stack exchange,提问作者Abel Olguin Chavez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:39:55