Symfony / Propel Hur man går till vänster

En JOIN är ett sätt att ansluta relaterade databastabeller med de gemensamma värdena mellan dem. Ett vänster sammanfogning innehåller alla raderna från primärtabellen plus relaterade medlemmar i den andra databasen om de existerar. Använda anslutningar kan avsevärt minska antalet databasfrågor som krävs för att göra en webbsida. Detta Tech-Recept beskriver hur man gör ett vänsterklubba i Symfony med Propel.


Det är vanligt att ha tabeller kopplade till utländska nycklar. Att få information från det länkade bordet kan åstadkommas genom ett vänsterklubb.

I det följande exemplet har jag ett primärt patientbord som är kopplat till en Doc-tabell med främmande nycklar. Inte bara vill jag lista den associerade läkaren hos en patient, jag vill också lista den associerade doktorns personsökarens nummer.

Här är ett skuret exempel schema.yml i min databasstruktur:

propell: patient: id: namn: varchar (255) doc_id: doc: id: namn: varchar (255) personsökare: varchar (255) 

Först utför jag mitt vänstra deltagande i min handlingsklass:

 $ c = nya kriterier (); $ c-> addJoin (PatientPeer :: DOC_ID, DocPeer :: ID, Kriterier :: LEFT_JOIN); $ this-> patients = PatientPeer :: doSelect ($ c); 

Slutligen matar jag ut data i min mall:

 foreach ($ patienter som $ patient): echo $ patient-> getDoc () -> getPager (); endforeach; 

Medan denna mallkod skulle fungera utan att vara med, är den här tekniken med deltagaren effektivare. Utan anslutningen skulle metoden getDoc () för patientmodellen göra en extra databasfråga för varje iteration av slingan. Med anslutningen samlas alla data som behövs för att hydrera Doc-objekten och patientdata samlas med en enda databasfråga.