sql >> Databasteknik >  >> RDS >> Mysql

Hur skapar man en komplex virtuell kolumn i en vältalig modell?

Lösning 1:Använda ett globalt omfång för att lägga till fältet i dina valda uttalanden

Det enda problemet med virtuella kolumner är att Eloquent kommer att försöka uppdatera dem om du inte förhindrar det. Du kan utesluta den från $fillable-arrayen och använda en global scopes i din modell för att lägga till den virtuella kolumnen, något i stil med:

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

Du måste komma ihåg att detta kommer att koppla din modell till MySQL eftersom datumfunktionerna du använder inte fungerar i databaser som sqlite.

Lösning 2:Använda en MySQL-vy

Normalt vad jag gör när jag har flera beräknade fält är att skapa en MySQL-vy. Skapa vyn med alla beräknade fält du vill ha, sedan kan du skapa en ny Eloquent-modell för den vyn utan att behöva oroa dig för frågeomfång.

Den enda varningen är att du naturligtvis inte kan använda skapa/uppdatera/ta bort på den här modellen, men om du bara använder modellen för visningsändamål borde det inte vara ett problem.




  1. Ingen databas vald - PHP &MySQL

  2. Hur kan jag få främmande nycklar för en tabell i mysql

  3. Bestående UUID i PostgreSQL med JPA

  4. Hur får du flera resultat från en enda CallableStatement?