Doctrine2 - 使用createQueryBuilder创建嵌套的SELECT语句错误 - "参数号无效..."

时间:2014-07-01 15:35:28

标签: php sql symfony doctrine-orm

上下文

我正在尝试转换此查询

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

使用this示例

进入几个createQueryBuilder查询

我已生成以下代码:

    $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();

但我不断收到此错误,告知参数数量不正确。

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

问题:

我将不胜感激任何帮助。这是我第一次使用createQueryBuilder,我不确定为什么会出现这个问题。谢谢!

1 个答案:

答案 0 :(得分:1)

您需要在外部查询上调用setParameter而不是外部查询。因为那是你最终运行的那个似乎是合乎逻辑的。