Eloquent 在返回之前修改数据

Eloquent modify data before retuning them

我想在 Eloquent 上构建类似中间件的东西。 当我对我的模型提出请求时 "Event" 我需要始终解析日期值。

这是我的资料:

事件模型:

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-d\TH:i:s.u\Z');
$event->date = $date;

关键是我需要所有请求的最后三行。 我可以把它们放在哪里,这样我就不必在每次请求之后都复制它们。

您可以使用 Laravel 的修改器:

protected $casts = [
    'date' => 'datetime:Y-m-d\TH:i:s.u\Z',
];

更多信息在这里:

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

在您的事件模型中创建一个方法,如下所示:

public function getDateAttribute()
{
   $date = Carbon::parse($this->date);
   return $date->format('Y-m-d\TH:i:s.u\Z');
}

现在无论何时调用 $event->date 都会得到修改后的事件。