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
相关产品推荐
相关产品推荐

