php - todas - Condición de ON de combinación izquierda Y otra sintaxis de condición en Doctrine
paginas para ver hashtags (1)
Estoy usando el generador de consultas de Doctrine en Symfony2 para crear una consulta para captar entidades.
Mi código actual se ve así:
$repository = $this->getDoctrine()->getRepository(''AaaBundle:Application'');
$queryBuilder = $repository->createQueryBuilder(''a'');
$queryBuilder
->addSelect(''u'')
->addSelect(''i'')
->orderBy(''a.created_date'', ''DESC'')
->leftJoin(''a.created_by'', ''u'')
->leftJoin(''a.installations'', ''i'')
//->where(''i.page = :page'')
//->setParameter(''page'', $found)
;
Ahora puedo usar esto para obtener todas las páginas independientemente de si tienen una instalación o no. Pero solo quiero unirme a ellos, la página $found
está disponible (de modo que si hay una instalación para la aplicación, pero está en otra página, la instalación no se unirá). Si elimino la cita de la cláusula where, solo se mostrarán las aplicaciones que tengan una instalación para la página. Quiero todas las aplicaciones con o sin instalaciones para la página.
En SQL, puedo obtener esto agregando AND
a la unión
LEFT JOIN installations i ON a.id = i.app AND i.page = :page
De esta manera obtengo la información de instalación para una aplicación que tiene una instalación en la página, pero obtengo valores nulos en las columnas para las aplicaciones que tienen instalaciones en otras páginas o no funcionan en absoluto.
¿Hay alguna manera de hacer esto en Doctrine o me conviene solo obtener todas las instalaciones para cada aplicación y luego consultar la página encontrada con php?
Puedes intentar esto:
use Doctrine/ORM/Query/Expr;
->leftJoin(''a.installations'', ''i'', Expr/Join::WITH, ''i.page = :page'')
->setParameter(''page'', $page)
Ver la función leftJoin in doc: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html#high-level-api-methods