无效的参数编号原则

时间:2017-03-06 09:24:31

标签: php symfony doctrine-orm doctrine

所以我有以下学说查询:

    $qb = $this->createQueryBuilder('c')
        ->select('c','g')
        ->join('c.descendant', 'g');

    $qb2 = $this->createQueryBuilder('c2')
        ->select('c2.id')
        ->addOrderBy('c2.ancestor', 'ASC');

    if ($params['rootGroup']) {
        $qb2->where('c2.ancestor = :groupId')
            ->setParameter('groupId', $params['rootGroup']->getId());
    }

    $in = $qb->expr()->in('g.id', $qb2->getDQL());

    $qb->where($in);

当我运行getQuery()时,我收到以下异常消息:

  

参数号无效:绑定变量数与令牌数不匹配

我转储了我的DQL,我得到了以下内容:

"SELECT c, g FROM CI\GroupBundle\Entity\GroupClosure c INNER JOIN c.descendant g WHERE g.id IN(SELECT c2.id FROM CI\GroupBundle\Entity\GroupClosure c2 WHERE c2.ancestor = :groupId ORDER BY c2.ancestor ASC)"

我还转储$ qb和$ qb2的getParameter(),我得到$ qb的空数组和$ qb2上有1个Parameter对象的数组。

我真的不知道我的查询有什么问题,因为我希望我只能绑定1个值。

感谢。

1 个答案:

答案 0 :(得分:2)

->setParameter('groupId', $params['rootGroup']->getId())将其移至$ qb。 getDQL()返回带参数名称的dql,而不是值。