sql >> Database teknologi >  >> RDS >> Mysql

Hvordan opretter man en kompleks virtuel kolonne i en veltalende model?

Løsning 1:Brug af et globalt omfang til at tilføje feltet til dine udvalgte udsagn

Det ene problem med virtuelle kolonner er Eloquent vil forsøge at opdatere dem, hvis du ikke forhindrer det. Du kan ekskludere det fra $fillable-arrayet og bruge et globalt omfang i din model for at tilføje den virtuelle kolonne, noget som:

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 skal huske på, at dette vil koble din model til MySQL, da de datofunktioner, du bruger, ikke fungerer i databaser som sqlite.

Løsning 2:Brug af en MySQL-visning

Normalt, hvad jeg gør, når jeg har flere beregnede felter, er at oprette en MySQL-visning. Opret visningen med alle de beregnede felter, du ønsker, så kan du oprette en ny Eloquent-model for den visning uden at skulle bekymre dig om forespørgselsomfang.

Den eneste advarsel er, at du selvfølgelig ikke kan bruge opret/opdater/slet på denne model, men hvis du kun bruger modellen til visningsformål, burde det ikke være et problem.




  1. MySQL – Forskellige metoder til at kende nuværende bruger

  2. Oracle join syntakseksempler

  3. Svæv højere i skyen med MariaDB SkySQL

  4. Docker compose mysql-forbindelse mislykkedes