Symfony / Propel Cómo unirse a la izquierda

UNIR es una forma de conectar tablas de bases de datos relacionadas por los valores comunes entre ellas. Una combinación a la izquierda contiene todas las filas de la tabla principal más los miembros relacionados de la segunda base de datos, si existen. El uso de uniones puede reducir significativamente la cantidad de consultas de base de datos necesarias para representar una página web. Esta Receta técnica describe cómo hacer una unión a la izquierda en Symfony usando Propel.


Es común tener tablas vinculadas por claves externas. La obtención de información de la tabla vinculada se puede lograr mediante una combinación a la izquierda.

En el siguiente ejemplo, tengo una tabla de Paciente principal que está vinculada a una tabla de Doc por claves externas. No solo quiero enumerar al médico asociado con un paciente, también quiero enumerar el número del localizador del médico asociado.

Aquí hay un ejemplo de esquema recortado de mi estructura de base de datos:

propel: paciente: id: nombre: varchar (255) doc_id: doc: id: nombre: varchar (255) buscapersonas: varchar (255) 

Primero realizo mi unión izquierda en mi clase de acciones:

 $ c = nuevos criterios (); $ c-> addJoin (PatientPeer :: DOC_ID, DocPeer :: ID, Criteria :: LEFT_JOIN); $ this-> pacientes = PatientPeer :: doSelect ($ c); 

Finalmente, muestro los datos en mi plantilla:

 foreach ($ pacientes como $ paciente): echo $ paciente-> getDoc () -> getPager (); endforeach 

Si bien este código de plantilla funcionaría sin la unión, esta técnica con la unión es más eficiente. Sin la unión, el método getDoc () del modelo del paciente tendría que realizar una consulta de base de datos adicional para cada iteración del bucle. Con la unión, los datos necesarios para hidratar los objetos Doc y los datos del paciente se recopilan con una única consulta de base de datos.