Laravel - Veltalende “har”, “med”, “Wherehas”

Laravel - Veltalende “har”, “med”, “Wherehas”

Problem

har, med og HVORHAS kan noen ganger være forvirrende for nybegynnerutviklere. La oss gi noe perspektiv på hva hver av disse betyr

Løsning

med() brukes vanligvis med ivrig belastning, noe som er en rask måte å trekke relaterte modeller. I utgangspunktet betyr det at Laravel sammen med hovedmodellen vil forhåndsliste det listede forholdet (e). Dette er gunstig når du trenger å laste inn tilleggsdata og ønsker å unngå å lage N+1 DB dårlig praksis. Med ivrig lasting kjører du bare en ekstra DB -spørring i stedet for potensielt hundrevis av ekstra spørsmål.

Eksempel:

Bruker> Hasmany> Organisasjon
$ brukere = bruker :: med ('organisasjoner')-> get ();
foreach ($ brukere som $ bruker)
$ brukere-> organisasjoner; // Innlegg er allerede lastet og ingen ekstra DB -spørring kjøres

Har

har () brukes til å filtrere den valgte modellen basert på det valgte forholdet. Det er i utgangspunktet en hvor metode for relasjoner. Hvis du bare bruker har ('organisasjon'), Ved å bruke det samme eksemplet med brukere og organisasjoner, vil det bety at det vil trekke alle brukerne som har minst en organisasjon i sin 'portefølje'.

Eksempel:

Bruker> Hasmany> Organisasjon
$ brukere = bruker :: har ('organisasjoner')-> get ();
// Bare brukere som har minst en organisasjon i porteføljen sin er
inneholdt i samlingen

HVORHAS

HVEHAS () er nesten det samme som har (). Det lar deg bare spesifisere flere filtre for at den relaterte modellen skal sjekkes.

Eksempel:

Bruker> Hasmany> Organisasjon
$ brukere = bruker :: Wherehas ('Organisations', Function ($ q)
$ q-> hvor ('CATED_AT', '> =', '2020-01-01 00:00:00');
)-> get ();
// Bare brukere som har organisasjoner opprettet i begynnelsen av 2020 og fremover blir returnert