Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създадете сложна виртуална колона в Eloquent Model?

Решение 1:Използване на глобален обхват за добавяне на полето към избраните от вас изрази

Единственият проблем с виртуалните колони е, че Eloquent ще се опита да ги актуализира, ако не го предотвратите. Можете да го изключите от масива $fillable и да използвате глобален обхват във вашия модел, за да добавите виртуалната колона, нещо като:

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

Трябва да имате предвид, че това ще свърже вашия модел с MySQL, тъй като функциите за дата, които използвате, няма да работят в бази данни като sqlite.

Решение 2:Използване на изглед на MySQL

Обикновено това, което правя, когато имам множество изчислени полета, е да създам изглед на MySQL. Създайте изгледа с всички изчислени полета, които искате, след което можете да създадете нов модел Eloquent за този изглед, без да се притеснявате за обхвата на заявката.

Единственото предупреждение е, че разбира се не можете да използвате create/update/delete на този модел, но ако използвате модела само за целите на показване, това не би трябвало да е проблем.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведете текст и специални знаци и MySQL

  2. Съхранявайте процедурите в phpMyAdmin

  3. MYSQL - Изтриване на заявка с Join

  4. Оптимизирайте извикването на данни в JDBC в JTable

  5. Има ли начин да се изчислят времевите разлики в MySQL с помощта на един избор