Переопределить значение create_at из моделей Eloquent без отключения отметок времени - PullRequest
0 голосов
/ 20 января 2020

В Laravel, можно ли переопределить значение для created_at значений для данной модели Eloquent?

В случае использования у меня есть модель User со столбцом часового пояса ( например, America/Chicago). Приложение хранит значения даты в UT C, и для одного пользователя я хотел бы преобразовать дату в соответствующий часовой пояс.

Я пытался использовать getCreatedAtAttribute, но это не работает.

Я ищу что-то вроде этого.

public function getCreatedAtAttribute($value)
{
   $user = auth()->user();
   if ($user && $user->timezone) {
      $timezone = $user->timezone; // This value can be "America\Chicago"
   } else {
      $timezone = \Illuminate\Support\Facades\Config::get('app.timezone');
   }

   $datetime = new DateTime($value);
   $datetime->setTimezone(new datetimezone($timezone));

   return $datetime;
}

1 Ответ

0 голосов
/ 20 января 2020

у вас есть два пути

1 - вы можете сохранить create_at по часовому поясу пользователя:

public function setCreatedAtAttribute($value)
{
   $user = auth()->user();
   if ($user && $user->timezone) {
      $timezone = $user->timezone; // This value can be "America\Chicago"
   } else {
      $timezone = \Illuminate\Support\Facades\Config::get('app.timezone');
   }

   $datetime = new DateTime($value,new DateTimeZone($timezone));

   $this->attributes['created_at'] = $datetime;
}

2 - сохранить как UT C в БД и получить его по часовому поясу пользователя:

public function getCreatedAtAttribute($value)
{
   $user = auth()->user();
   if ($user && $user->timezone) {
      $timezone = $user->timezone; // This value can be "America\Chicago"
   } else {
      $timezone = \Illuminate\Support\Facades\Config::get('app.timezone');
   }

   $datetime = new DateTime($value,new DateTimeZone($timezone));

   return $datetime;
}
...