Symfony / Propel How to Left Join

Un JOIN è un modo per connettere le tabelle del database correlate con i valori comuni tra di loro. Un join sinistro contiene tutte le righe della tabella primaria più i membri correlati del secondo database, se presenti. L'utilizzo dei join può ridurre in modo significativo il numero di query del database richieste per il rendering di una pagina Web. Questa Tech-Recipe descrive come eseguire un join sinistro in Symfony usando Propel.


È comune avere tabelle collegate da chiavi esterne. Ottenere informazioni dalla tabella collegata può essere ottenuto da un join di sinistra.

Nell'esempio seguente, ho una tabella Paziente primaria collegata a una tabella Doc da chiavi esterne. Non voglio solo elencare il medico associato con un paziente, ma voglio anche elencare il numero del cercapersone del medico associato.

Ecco un esempio di schema.yml ritagliato della mia struttura di database:

propel: patient: id: nome: varchar (255) doc_id: doc: id: nome: varchar (255) cercapersone: varchar (255) 

Per prima cosa eseguo il mio join sinistro nella mia classe di azioni:

 $ c = nuovi criteri (); $ c-> addJoin (PatientPeer :: DOC_ID, DocPeer :: ID, Criteria :: LEFT_JOIN); $ this-> patients = PatientPeer :: doSelect ($ c); 

Infine, invio i dati nel mio modello:

 foreach ($ pazienti come $ paziente): echo $ patient-> getDoc () -> getPager (); endforeach; 

Mentre questo codice modello funzionerebbe senza il join, questa tecnica con il join è più efficiente. Senza il join, il metodo getDoc () del modello Patient dovrebbe effettuare una query di database aggiuntiva per ogni iterazione del ciclo. Con il join, i dati necessari per idratare gli oggetti Doc e i dati del paziente sono tutti raccolti con una singola query del database.