Symfony / Propel Comment joindre à gauche

Une JOIN est un moyen de connecter des tables de base de données liées par leurs valeurs communes. Une jointure gauche contient toutes les lignes de la table primaire ainsi que les membres associés de la deuxième base de données, s'ils existent. L'utilisation de jointures peut réduire considérablement le nombre de requêtes de base de données nécessaires au rendu d'une page Web. Cette recette technique explique comment effectuer une jointure à gauche dans Symfony à l'aide de Propel.


Il est courant d'avoir des tables liées par des clés étrangères. L'obtention d'informations à partir de la table liée peut être réalisée par une jointure gauche.

Dans l'exemple ci-dessous, j'ai une table Patient principale qui est liée à une table Doc par des clés étrangères. Non seulement je veux lister le médecin associé à un patient, mais aussi le numéro de téléavertisseur du médecin associé.

Voici un exemple recadré schema.yml de ma structure de base de données:

propel: patient: id: nom: varchar (255) id_doc: doc: id: nom: varchar (255) pager: varchar (255) 

J'effectue d'abord ma jointure gauche dans mon cours d'actions:

 $ c = nouveaux critères (); $ c-> addJoin (PatientPeer :: DOC_ID, DocPeer :: ID, Critères :: LEFT_JOIN); $ this-> patients = PatientPeer :: doSelect ($ c); 

Enfin, je produis les données dans mon modèle:

 foreach ($ patients en tant que $ patient): echo $ patient-> getDoc () -> getPager (); fin de chaque 

Bien que ce code de modèle fonctionne sans jointure, cette technique avec la jointure est plus efficace. Sans la jointure, la méthode getDoc () du modèle Patient devrait créer une requête de base de données supplémentaire pour chaque itération de la boucle. Avec la jointure, les données requises pour hydrater les objets Doc et les données patient sont toutes réunies en une seule requête de base de données.