PDOException:SQLSTATE[22007]:1292 UTC ISO-8601上的日期时间值不正确



你好,我收到以下错误

PDOException:SQLSTATE[22007]:1292第1行/[path]/[to]/[project]/vendor/laraavel/framework.src.IIlluminate/Database/Connection.php:496 中列"created_timestamp"的日期时间值"2022-03-07T18:12.000000Z"不正确

对我来说,这看起来像是一个有效的UTC ISO-8601日期格式

// migration
Schema::create('my_model', function (Blueprint $table) {
// ...
$table->datetime('created_timestamp');
});
// model
class MyModel extends Model
{
protected $casts = [
'created_timestamp' => 'datetime',
];
}
// code
var_dump($instance->getAttribute('created_timestamp'));
DB::table($model->getTable())->upsert(
[$instance->toArray()],
[$model->getKeyName()]
);

var dump打印一个carbon实例。医生说:

将列强制转换为日期时,可以将相应的模型属性值设置为UNIX时间戳、日期字符串(Y-m-d(、日期-时间字符串或DateTime/Carbon实例。日期的值将被正确转换并存储在数据库中。

此处的文档https://laravel.com/docs/8.x/eloquent-mutators#date-casting和时区也强烈建议保留默认的UTC格式,这样我就不想强制转换为自定义的"datetime:Y-m-d H:I:s"。

为什么我不能重新销售这个型号呢?

关键是用$instance->getAttributes()替换$instance->toArray(),以获得MySQL友好的值,而不需要自定义转换

最新更新