Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak stworzyć złożoną kolumnę wirtualną w modelu elokwentnym?

Rozwiązanie 1:użycie zakresu globalnego w celu dodania pola do wybranych instrukcji

Jedynym problemem związanym z wirtualnymi kolumnami jest to, że Eloquent spróbuje je zaktualizować, jeśli nie zapobiegniesz temu. Możesz wykluczyć go z tablicy $fillable i użyć zakresu globalnego w swoim modelu, aby dodać wirtualną kolumnę, coś takiego:

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'));
    });
}

Musisz pamiętać, że to połączy Twój Model z MySQL, ponieważ funkcje dat, których używasz, nie będą działać w bazach danych, takich jak sqlite.

Rozwiązanie 2:Korzystanie z widoku MySQL

Zwykle to, co robię, gdy mam wiele pól obliczeniowych, to tworzenie widoku MySQL. Utwórz widok ze wszystkimi żądanymi polami obliczeniowymi, a następnie możesz utworzyć nowy model Eloquent dla tego widoku bez martwienia się o zakresy zapytań.

Jedynym zastrzeżeniem jest to, że oczywiście nie możesz używać tworzenia/aktualizowania/usuwania w tym modelu, ale jeśli używasz modelu tylko do celów wyświetlania, nie powinno to stanowić problemu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie utf8mb4 w MySQL

  2. MySQL/MariaDB:utwórz widok tabeli przestawnej

  3. Jak InnoDB przechowuje kolumny znaków?

  4. Grupa MySQL według godzin

  5. Dwa lewe złączenia dają mi nieprawdziwe dane (podwójne dane?) w MySQL