laravel8模型toArray()转换成数组时,会把时间改为UTC时区的字符串。
解决方式:在模型中重写 serializeDate 方法
protected function serializeDate(DateTimeInterface $date)
{
return $date instanceof \DateTimeImmutable ?
CarbonImmutable::instance($date)->toJSON() :
Carbon::instance($date)->toISOString(true);
}
此后设置 $cast
$cast = [
'created_at' => 'datetime:Y-m-d H:i:s',
'updated_at' => 'datetime:Y-m-d H:i:s'
];
完美解决。
但是每个模型都要重写此方法,很繁琐,建议写个trait。