Løsning 1:Brug af et globalt omfang til at tilføje feltet til dine udvalgte udsagn
Det ene problem med virtuelle kolonner er Eloquent vil forsøge at opdatere dem, hvis du ikke forhindrer det. Du kan ekskludere det fra $fillable-arrayet og bruge et globalt omfang i din model for at tilføje den virtuelle kolonne, noget som:
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'));
});
}
Du skal huske på, at dette vil koble din model til MySQL, da de datofunktioner, du bruger, ikke fungerer i databaser som sqlite.
Løsning 2:Brug af en MySQL-visning
Normalt, hvad jeg gør, når jeg har flere beregnede felter, er at oprette en MySQL-visning. Opret visningen med alle de beregnede felter, du ønsker, så kan du oprette en ny Eloquent-model for den visning uden at skulle bekymre dig om forespørgselsomfang.
Den eneste advarsel er, at du selvfølgelig ikke kan bruge opret/opdater/slet på denne model, men hvis du kun bruger modellen til visningsformål, burde det ikke være et problem.