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

Laravel 9中Carbon存入Oracle数据库日期格式报错求助

解决Laravel 9中Carbon生成Oracle兼容日期格式的问题

问题根源

你用Carbon::now()->timestamp得到的是整数时间戳,但Oracle的日期字段需要符合格式的日期字符串,因此触发ORA-01843无效月份错误;另外你错误地在整数时间戳上调用format()方法,自然会报Call to a member function format() on int。

正确解决方案

方案1:利用Laravel模型自动日期处理

Laravel默认会将模型中声明的日期字段自动转换为Carbon实例,并且适配数据库的日期格式。确保你的User模型中已将photo_verified_at加入日期字段:

// app/Models/User.php
class User extends Model
{
    protected $casts = [
        'photo_verified_at' => 'datetime',
        // 其他字段...
    ];
}

之后直接赋值Carbon实例即可,Laravel会自动处理成Oracle兼容的格式:

$user->photo_verified_at = Carbon::now();
$user->save();

方案2:手动格式化Carbon到目标格式

如果需要手动生成数据库中显示的29/12/22 18:30:43,000000000格式,直接在Carbon实例上调用format()方法(注意格式符的正确使用:d是两位日期,m是两位月份,y是两位年份):

$user->photo_verified_at = Carbon::now()->format('d/m/y H:i:s,000000000');
$user->save();

方案3:配置Oracle数据库的全局日期格式

在config/database.php的Oracle连接配置中,指定默认的日期/时间格式,让Laravel自动适配:

// config/database.php
'connections' => [
    'oracle' => [
        'driver' => 'oracle',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '1521'),
        'database' => env('DB_DATABASE', 'xe'),
        'username' => env('DB_USERNAME', 'user'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'AL32UTF8',
        'prefix' => '',
        'prefix_schema' => '',
        // 添加以下配置
        'date_format' => 'd/m/y',
        'datetime_format' => 'd/m/y H:i:s,000000000',
    ],
];

内容的提问来源于stack exchange,提问作者JAOdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:50:16