Eloquent изменяет данные перед их перенастройкой

#php #eloquent #php-carbon #slim-3

#php #eloquent #php-carbon #slim-3

Вопрос:

Я хочу создать что-то вроде промежуточного программного обеспечения на Eloquent. Когда я делаю запрос в моей модели «Событие», мне нужно всегда анализировать значение даты.

Вот что у меня есть:

Модель событий:

 class Event extends Model {
  protected $fillable = [
    'type',
    'topic',
    'teacher',
    'date',
    'endDate'
  ];
}
 

Функция, запрашивающая данные:

 $event = Event::find(Todo::max('event_id'));

$date = Carbon::parse($event->date);
$date->format('Y-m-dTH:i:s.uZ');
$event->date = $date;
 

Дело в том, что мне понадобятся последние три строки для всех запросов.
Куда я могу их поместить, чтобы мне не приходилось копировать их после каждого запроса.

Ответ №1:

Вы можете использовать мутаторы Laravel :

 protected $casts = [
    'date' => 'datetime:Y-m-dTH:i:s.uZ',
];
 

Больше информации здесь :

https://laravel.com/docs/5.8/eloquent-mutators

Ответ №2:

Создайте метод в своей модели событий следующим образом:

 public function getDateAttribute()
{
   $date = Carbon::parse($this->date);
   return $date->format('Y-m-dTH:i:s.uZ');
}
 

Теперь всякий раз, когда вы вызываете $event-> date, вы получаете измененный.

Комментарии:

1. Получаю ли я также измененную дату при вызове Event::all(), поскольку date является ее частью?

2. На самом деле я получаю сегодняшнюю дату в запрошенном формате

3. Да, это должно работать Event::all() ; И он должен возвращать любую дату, которую вы сохранили в своей базе данных в запрошенном формате