Soluzione 1:utilizzo di un ambito globale per aggiungere il campo alle istruzioni selezionate
L'unico problema con le colonne virtuali è che Eloquent proverà ad aggiornarle se non lo previeni. Puoi escluderlo dall'array $fillable e utilizzare un ambito globale nel tuo modello per aggiungere la colonna virtuale, qualcosa come:
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'));
});
}
Dovrai tenere presente che questo accoppierà il tuo modello a MySQL poiché le funzioni di data che stai utilizzando non funzioneranno in database come sqlite.
Soluzione 2:utilizzo di una vista MySQL
Normalmente quello che faccio quando ho più campi calcolati è creare una vista MySQL. Crea la vista con tutti i campi calcolati che desideri, quindi puoi creare un nuovo modello eloquente per quella vista senza doversi preoccupare degli ambiti delle query.
L'unico avvertimento è che ovviamente non puoi usare crea/aggiorna/elimina su questo modello, ma se stai usando il modello solo per scopi di visualizzazione, non dovrebbe essere un problema.