Řešení 1:Použití globálního rozsahu k přidání pole do vybraných příkazů
Jediný problém s virtuálními sloupci je, že Eloquent se je pokusí aktualizovat, pokud tomu nezabráníte. Můžete jej vyloučit z pole $fillable a použít globální rozsah ve vašem modelu přidejte virtuální sloupec, něco jako:
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'));
});
}
Musíte mít na paměti, že to propojí váš model s MySQL, protože funkce data, které používáte, nebudou fungovat v databázích, jako je sqlite.
Řešení 2:Použití pohledu MySQL
Normálně to, co dělám, když mám více vypočítaných polí, je vytvoření pohledu MySQL. Vytvořte zobrazení se všemi požadovanými vypočítanými poli a poté můžete pro tento pohled vytvořit nový výmluvný model, aniž byste se museli starat o rozsahy dotazů.
Jedinou výhradou je, že na tomto modelu samozřejmě nemůžete použít create/update/delete, ale pokud model používáte pouze pro účely zobrazení, neměl by to být problém.