Решение 1:Използване на глобален обхват за добавяне на полето към избраните от вас изрази
Единственият проблем с виртуалните колони е, че Eloquent ще се опита да ги актуализира, ако не го предотвратите. Можете да го изключите от масива $fillable и да използвате глобален обхват във вашия модел, за да добавите виртуалната колона, нещо като:
protected static function boot()
{
parent::boot();
static::addGlobalScope('next_action', function (Builder $builder) {
$builder->addSelect(DB::raw('DATE_ADD(updated_at, INTERVAL days DAY) AS next_action'));
});
}
Трябва да имате предвид, че това ще свърже вашия модел с MySQL, тъй като функциите за дата, които използвате, няма да работят в бази данни като sqlite.
Решение 2:Използване на изглед на MySQL
Обикновено това, което правя, когато имам множество изчислени полета, е да създам изглед на MySQL. Създайте изгледа с всички изчислени полета, които искате, след което можете да създадете нов модел Eloquent за този изглед, без да се притеснявате за обхвата на заявката.
Единственото предупреждение е, че разбира се не можете да използвате create/update/delete на този модел, но ако използвате модела само за целите на показване, това не би трябвало да е проблем.