sql >> Databáze >  >> RDS >> Mysql

Jak vytvořit komplexní virtuální sloupec ve výmluvném modelu?

Ř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.




  1. Sledování aktualizací synchronních statistik

  2. Jak procházet sadou výsledků mysql

  3. SQLite LIKE

  4. Jak vytvořit tabulku z výsledku výběrového dotazu v SQL Server 2008