Doctrine2 - 使用createQueryBuilder创建嵌套的SELECT语句 - “参数号无效...”
问题描述:
Context:
I am trying to convert this query
Select
*
FROM
phases AS P
WHERE
NOT EXISTS( SELECT
*
FROM
rating AS R
WHERE
R.phase_id = P.id AND R.user_id = 53)
LIMIT 1
into a couple of createQueryBuilder queries using this example
I have generated the following code:
$subquery = $em->createQueryBuilder()
->select("r.id")
->from('AppDemoBundle:Rating', 'r')
->innerjoin('r.user', 'u')
->where('u.id = :_id')
->setParameter('_id', 53)
->getDQL();
$query = $em->createQueryBuilder()
->select('p')
->from('AppDemoBundle:Phases', 'p');
$query->andWhere($query->expr()->notIn('p.id', $subquery));
$phase = $query->getQuery()->getResult();
but I keep getting this error telling that the number of parameters is incorrect.
Doctrine\\ORM\\Query\\QueryException: Invalid parameter number: number of bound variables does not match number of tokens (uncaught exception) at C:\\wamp\\www\\demo\\vendor\\doctrine\\lib\\Doctrine\\ORM\\Query\\QueryException.php line 62
Question:
I would appreciate any help with this. It's my first time using the createQueryBuilder and I am not sure why this problem is happening. Thanks!
答
You need to call setParameter
on the outer query instead of the outer one. Since that's the one you end up running it seems logical.