Lösung 1:Verwenden eines globalen Gültigkeitsbereichs zum Hinzufügen des Felds zu Ihren Auswahlanweisungen
Das einzige Problem mit virtuellen Spalten ist, dass Eloquent versucht, sie zu aktualisieren, wenn Sie es nicht verhindern. Sie können es aus dem $fillable-Array ausschließen und einen globalen Geltungsbereich verwenden in Ihrem Modell, um die virtuelle Spalte hinzuzufügen, etwa so:
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'));
});
}
Sie müssen bedenken, dass dies Ihr Modell mit MySQL koppelt, da die von Ihnen verwendeten Datumsfunktionen in Datenbanken wie sqlite nicht funktionieren.
Lösung 2:Verwenden einer MySQL-Ansicht
Wenn ich mehrere berechnete Felder habe, erstelle ich normalerweise eine MySQL-Ansicht. Erstellen Sie die Ansicht mit allen gewünschten berechneten Feldern, dann können Sie ein neues Eloquent-Modell für diese Ansicht erstellen, ohne sich um Abfragebereiche kümmern zu müssen.
Die einzige Einschränkung ist, dass Sie bei diesem Modell natürlich nicht create/update/delete verwenden können, aber wenn Sie das Modell nur zu Anzeigezwecken verwenden, sollte das kein Problem sein.