我无法使子查询与Doctrine一起使用。
这是我的要求:
$qb = $this->getEntityManager()->createQueryBuilder()
->select("plafond")
->addSelect("plafond.id AS id")
->addSelect('(select count(gd) from ACCUEILBundle:Ttgeneration gd
inner join ACCUEILBundle:Tgeneration gn with gn.id = gd.generation
where gn.nouveaulot = :new_generation and
gd.donnee = :entity_id and gd.action = :action_creation) as suppr')
->from("ACCUEILBundle:Trprst", "plafond")
->setParameter('new_generation', 1)
->setParameter('entity_id', 'plafond.id')
->setParameter('action_creation',32);
我想问题出在带plafond.id的setParameter中:好像没有使用当前记录的ID。
实际上,对于每条记录,此suppr字段应为0,但应为39。但是对于主义查询,就像我对每条记录都有0。
但是当我用纯sql编写查询时,没问题:
SELECT plafond.id AS id,
(select count(*) from ttgeneration gd
inner join tgeneration gn on gn.id = gd.generation
where gn.nouveaulot = 1 and
gd.donnee = plafond.id and gd.action = 32) as suppr
FROM trprst plafond
纯sql查询的结果:
36 0
37 0
38 0
39 1
谢谢