Symfony / Propel, wie Sie sich links anmelden

Ein JOIN ist eine Möglichkeit, verknüpfte Datenbanktabellen anhand der gemeinsamen Werte zwischen ihnen zu verbinden. Ein linker Join enthält alle Zeilen aus der Primärtabelle sowie zugehörige Mitglieder der zweiten Datenbank, sofern vorhanden. Durch die Verwendung von Joins kann die Anzahl der Datenbankabfragen zum Rendern einer Webseite erheblich reduziert werden. In diesem Tech-Rezept wird beschrieben, wie Sie Symfony mithilfe von Propel links verbinden.


Es ist üblich, dass Tabellen durch Fremdschlüssel verknüpft werden. Das Abrufen von Informationen aus der verknüpften Tabelle kann durch einen Link nach links erfolgen.

Im folgenden Beispiel habe ich eine primäre Patiententabelle, die durch Fremdschlüssel mit einer Doc-Tabelle verknüpft ist. Ich möchte nicht nur den zugeordneten Arzt bei einem Patienten auflisten, sondern auch die Pager-Nummer des zugehörigen Arztes.

Hier ist ein abgeschnittenes Beispielschema.yml meiner Datenbankstruktur:

propel: patient: id: name: varchar (255) doc_id: doc: id: name: varchar (255) pager: varchar (255) 

Zuerst führe ich meinen linken Join in meiner Aktionsklasse durch:

 $ c = neue Kriterien (); $ c-> addJoin (PatientPeer :: DOC_ID, DocPeer :: ID, Kriterien :: LEFT_JOIN); $ this-> patient = PatientPeer :: doSelect ($ c); 

Zum Schluss gebe ich die Daten in meiner Vorlage aus:

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

Während dieser Vorlagencode ohne den Join funktionieren würde, ist diese Technik mit dem Join effizienter. Ohne den Join müsste die getDoc () -Methode des Patientenmodells für jede Iteration der Schleife eine zusätzliche Datenbankabfrage durchführen. Mit dem Join werden die für die Hydratisierung der Doc-Objekte und der Patientendaten erforderlichen Daten mit einer einzigen Datenbankabfrage erfasst.