Utilizzo di join in Laravel Eloquent Query per prestazioni migliori

Utilizzo di join in Laravel Eloquent Query per prestazioni migliori
Molto spesso vedo le persone commettere molti errori quando interagiscono con un database e molti principianti non prestano davvero attenzione a quante chiamate la marca. E questo va bene all'inizio. Soprattutto se la tua applicazione è piccola e stai ancora imparando.

Inoltre, penso anche che nei primi giorni dell'applicazione Laravel, dovresti concentrarti sulla costruzione delle caratteristiche e della codifica. Una volta che inizi a correre nei problemi e inizi effettivamente a notare che la tua applicazione è lenta, solo allora dovresti esaminare cosa puoi fare per ottimizzare le tue query MySQL.

Il 99% delle volte utilizzerai metodi eloquenti per effettuare chiamate di database e talvolta il percorso facile che si desidera prendere, si rivela per causare problemi lungo la linea.

Orm come Eloquent è semplicemente fantastico e ti supporterà fino alla fine.

Ora immagina di aver costruito la tua domanda da un po 'di tempo e vuoi fare un refactor su alcune delle tue chiamate per renderle leggermente più veloci. Facciamo un esempio di come puoi unirti alle domande per ottenere lo stesso risultato, in meno tempo.

Problema

Considera un codice di esempio di seguito, che utilizza il Utente E Organizzazione Tabella per restituire il nome utente.

$ user = user :: find ($ user_id);
$ organizzazioni = organizzazione :: where ('id', $ user-> organizzation_id)-> pluck ('name')-> fithe ();

L'esempio del codice sopra è abbastanza semplice da comprendere ma utilizza due chiamate separate nel database. La seconda chiamata è ovviamente affidabile dal primo, quindi dobbiamo aspettare che il primo finisca prima di poter arrivare a quello successivo.

Soluzione

Miglioriamo questo esempio di codice combinando entrambe le richieste in una singola query.

$ user_with_organization = user :: Where ('id', $ user_id)
-> LeftJoin ("Organizzazioni", "Utenti.Organizzazione_id ',' = ',' organizzazioni.id')
-> Seleziona ('Utenti.id ',' organizzazioni.Nome ')-> First ();

Ora, quello che abbiamo appena fatto sopra?
1. Innanzitutto prendiamo di mira l'utente in base al $ user_id, esattamente la stessa domanda della prima.
2. Successivamente, ci uniamo ai risultati con la tabella delle organizzazioni utilizzando la tabella degli utenti riempire la query di join a sinistra
3. La prima query ha preso il modello utente che ci fornisce l'accesso al Organizzazione_id attributo.
4. Selezioniamo l'ID utente e il nome dell'organizzazione.
5. Infine, utilizziamo il primo () metodo, che garantisce che una volta che trovi un'unica organizzazione che soddisfi il requisito, restituirà immediatamente il nome dell'organizzazione.

Come funziona un join a sinistra

Quando hai due query e vuoi lasciare unisciti a quello del secondo, ciò significa che il tuo risultato finale sarà il risultato della tua prima query, in cui alcuni dei risultati potrebbero ricevere un po 'di corrispondenza con la seconda query e avere alcuni dati extra con loro.

Questo è tutto. Ora hai una migliore comprensione di come funziona il join di sinistra. Usalo per combinare query correlate a fare una singola richiesta al database. Sembra abbastanza semplice ma usare lo stesso metodo può aiutarti a ottimizzare le query più complesse che trattano più tabelle.

Se hai commenti o suggerimenti, sentiti libero di contattarmi.