我正在开发连接到2个数据库的Laravel 5.8应用程序。一个是应用程序自己的数据库,另一个是旧版MySQL数据库。遗憾的是,旧数据库将日期时间存储为“欧洲/伦敦”而不是UTC。
在Laravel模型中,是否有一种很好的方法可以自动将“欧洲/伦敦”日期调整为“ UTC”?
我已经看到您可以将'timezone'=>'+01:00'
添加到'config / database.php'中的连接,但这没有影响。而且我不想在“ config / app.php”中设置应用程序的默认时区,因为这会影响应用程序自己的数据库,该数据库必须是UTC。
如果数据库包含'2019-04-01 13:00:00',我希望$model->created_at
默认情况下返回'2019-04-01 12:00:00'(等效于UTC)。同样,如果我这样做,$model->created_at = '2019-04-01 12:00:00'; $model->save()
应该在数据库中另存为'2019-04-01 13:00:00'。
有人可以帮忙吗?我开始认为我必须为所有datetime列创建一堆访问器和更改器,这似乎是很多工作。
答案 0 :(得分:0)
最后,我使用了getAttribute和setAttribute
public function getAttribute($key){
$value = parent::getAttribute($key);
if(in_array($key, $this->dates)){
$localDateTime = new \Carbon\Carbon(parent::asDateTime($value), 'Europe/London');
$localDateTime->setTimezone('UTC');
return $localDateTime;
}
else
{
return $value;
}
}
public function setAttribute($key, $value){
if(in_array($key, $this->dates) && $value !== null){
$value = new \Carbon\Carbon(parent::asDateTime($value), 'UTC');
$value->setTimezone('Europe/London');
}
parent::setAttribute($key, $value);
}
我将其放在BaseModel或trait中。另外,“欧洲/伦敦”将位于配置文件中。
似乎可以正常工作。真可惜,没有内置的方式(我知道)。