Laravel - Eloquent ha, con, Wherehas

Laravel - Eloquent ha, con, Wherehas

Problema

ha, con E dove ha a volte può essere confuso per gli sviluppatori per principianti. Diamo qualche prospettiva su cosa significhi ciascuno di questi

Soluzione

con() è generalmente usato con carico desideroso, che è un modo rapido per tirare i modelli correlati. Fondamentalmente, significa che, insieme al modello principale, Laravel precaricherà le relazioni elencate. Questo è vantaggioso quando è necessario caricare ulteriori dati e si desidera evitare di fare N+1 DB cattive pratiche. Con un caricamento desideroso, si esegue solo una query DB aggiuntiva anziché potenzialmente centinaia di domande aggiuntive.

Esempio:

Utente> Hasmany> Organizzazione
$ utenti = utente :: con ('organizzazioni')-> get ();
foreach ($ utenti come $ utente)
$ utenti-> organizzazioni; // I post sono già caricati e non viene eseguita alcuna query DB aggiuntiva

Ha

ha() viene utilizzato per filtrare il modello di selezione in base alla relazione selezionata. È fondamentalmente un metodo dove per le relazioni. Se usi semplicemente ha ("organizzazione"), Usando lo stesso esempio di utenti e organizzazioni, significherebbe che attirerà tutti gli utenti che hanno almeno un'organizzazione nel loro "portafoglio".

Esempio:

Utente> Hasmany> Organizzazione
$ utenti = utente :: ha ('organizzazioni')-> get ();
// solo gli utenti che hanno almeno un'organizzazione nel proprio portafoglio
contenuto nella collezione

Dove ha

Wherehas () è quasi lo stesso di ha(). Ti consente solo di specificare i filtri aggiuntivi per il controllo del modello correlato.

Esempio:

Utente> Hasmany> Organizzazione
$ utenti = user :: wherehas ('organizzazioni', funzione ($ q)
$ q-> dove ('creato_at', '> =', '2020-01-01 00:00:00');
)-> get ();
// vengono restituiti solo gli utenti che hanno le organizzazioni create all'inizio del 2020