#laravel #eloquent #timestamp
#laravel #eloquent #timestamp
Вопрос:
Я испытываю нечто довольно странное для любой модели Eloquent с Laravel 7!
PS: Я запускал каждый тест, который я делал:
php artisan optimize:clear
Я не знаю, чего мне здесь не хватает!
Я не буду публиковать никакой код, потому что это простой CRUD с привязками модели.
При сохранении полей created_at и updated_at они правильно сохраняются в MySQL с моим часовым поясом «America / Sao_Paulo».
Но если я сделаю это в любом контроллере:
return $model->get()
или
return $model->paginate()
или
Model::all()
Я получаю ответ:
{
"data": [
{
... other fields
"created_at": "2020-08-23T15:22:41.000000Z",
"updated_at": "2020-08-23T15:22:41.000000Z"
}
]
}
И он возвращает неправильное время с 1 часом.
Однако, здесь все становится странным … если я print_r () любой из них, я получаю правильное время!
Array
(
... other fields
[created_at] => 2020-08-23 12:22:41
[updated_at] => 2020-08-23 12:22:41
)
Я пытался использовать:
public function getDateFormat()
{
return 'Y-m-d H:i:s';
}
Но никакого эффекта!
Заранее спасибо!
Ответ №1:
Laravel 7 использует новый формат сериализации даты при использовании метода toArray или toJSON в моделях Eloquent с UTC
До Laravel 7 даты были бы сериализованы в формат, подобный следующему :
2019-12-02 20:01:00
Даты, сериализованные с использованием формата ISO-8601, будут выглядеть как :
2019-12-02T20:01:00.283041Z
Пожалуйста, обратите внимание, что даты ISO-8601 всегда выражаются в UTC.
Если вы хотите продолжать использовать предыдущее поведение, вы можете переопределить serializeDate()
метод в вашей модели :
use DateTimeInterface;
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
Смотрите официальный документ по обновлению здесь
Ответ №2:
Если вы изменили конфигурацию часового пояса в config/app.php но, сохраняя дату в базе данных с другими форматами часовых поясов, сохраните часовой пояс в UTC, чтобы laravel не менял его на другие форматы при вызове из класса модели, или вы можете сделать наоборот, сохранив его в формате UTC в базе данных, а затем измените конфигурацию на часовой пояс, который нужен вашему приложению.
// config/app.php
'timezone' => 'UTC',