Lösning 1:Använda ett globalt omfång för att lägga till fältet i dina valda uttalanden
Det enda problemet med virtuella kolumner är att Eloquent kommer att försöka uppdatera dem om du inte förhindrar det. Du kan utesluta den från $fillable-arrayen och använda en global scopes i din modell för att lägga till den virtuella kolumnen, något i stil med:
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 måste komma ihåg att detta kommer att koppla din modell till MySQL eftersom datumfunktionerna du använder inte fungerar i databaser som sqlite.
Lösning 2:Använda en MySQL-vy
Normalt vad jag gör när jag har flera beräknade fält är att skapa en MySQL-vy. Skapa vyn med alla beräknade fält du vill ha, sedan kan du skapa en ny Eloquent-modell för den vyn utan att behöva oroa dig för frågeomfång.
Den enda varningen är att du naturligtvis inte kan använda skapa/uppdatera/ta bort på den här modellen, men om du bara använder modellen för visningsändamål borde det inte vara ett problem.