我需要创建一个使用IN语句的查询构建器表达式,我想在其中放置另一个由querybuilder创建的查询。在DQL中,我可以获得的查询是:
SELECT u
FROM BundleUsuarioBundle:Usuario u
WHERE u.id IN (
SELECT u2.id
FROM BundleTramiteBundle:ExamenTeorico et
JOIN et.usuarioHabilitacion u2
WHERE u2.centro = :centro
) ORDER BY u.apellido ASC, u.nombre ASC
但是我不使用它,因为我需要把它放在" query_builder'表单的实体字段的选项。所以,我需要一个QB,但我不知道如何嵌套querybuilder表达式。我实际上有两个QueryBuilder格式的查询,但是分开了:
$qb = $this->em->createQueryBuilder();
$qb
->select('usuario_habilitacion.id')
->from('BundleTramiteBundle:ExamenTeorico', 'examen_teorico')
->join('examen_teorico.usuarioHabilitacion', 'usuario_habilitacion');
$user = $this->getUser();
if ( !$this->esTipoASPV($user) ) {
$centro = $this->getCentro();
$qb
->andWhere($qb->expr()->eq('usuario_habilitacion.centro', ':centro'))
->setParameter(':centro', $centro->getId());
}
和
$er
->createQueryBuilder('u')
->where($qb->expr()->in('u.id', ___???___ ))
->addOrderBy("u.apellido", "ASC")
->addOrderBy("u.nombre", "ASC");
答案 0 :(得分:0)
您可以在第一个查询中获取子查询的结果,但调用getDQL()并将其放在第一个查询的where子句中。确保在子查询中选择id。
示例:
$qb->andWhere($qb->expr()->in('u.id', $er->getDQL()))