douwei7501 2014-07-01 15:35
浏览 53
已采纳

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!

  • 写回答

1条回答 默认 最新

  • dongzen5577 2014-07-01 15:46
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?