Doctrine2 - 使用createQueryBuilder创建嵌套的SELECT语句 - “参数号无效...”

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.