Rozwiązanie 1:użycie zakresu globalnego w celu dodania pola do wybranych instrukcji
Jedynym problemem związanym z wirtualnymi kolumnami jest to, że Eloquent spróbuje je zaktualizować, jeśli nie zapobiegniesz temu. Możesz wykluczyć go z tablicy $fillable i użyć zakresu globalnego w swoim modelu, aby dodać wirtualną kolumnę, coś takiego:
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'));
});
}
Musisz pamiętać, że to połączy Twój Model z MySQL, ponieważ funkcje dat, których używasz, nie będą działać w bazach danych, takich jak sqlite.
Rozwiązanie 2:Korzystanie z widoku MySQL
Zwykle to, co robię, gdy mam wiele pól obliczeniowych, to tworzenie widoku MySQL. Utwórz widok ze wszystkimi żądanymi polami obliczeniowymi, a następnie możesz utworzyć nowy model Eloquent dla tego widoku bez martwienia się o zakresy zapytań.
Jedynym zastrzeżeniem jest to, że oczywiście nie możesz używać tworzenia/aktualizowania/usuwania w tym modelu, ale jeśli używasz modelu tylko do celów wyświetlania, nie powinno to stanowić problemu.