2017-03-06 107 views
1

所以我有以下原则查询:无效参数号学说

$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个参数对象的数组。

我真的不知道我的查询出了什么问题,因为我期待我应该只绑定1个值。

谢谢。

+0

'$ params ['rootGroup'] - > getId()'return? – LBA

+0

整数。实体的主要ID。 – iamjc015

回答

2

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

+0

它确实有效。谢谢。将接受这个答案。 – iamjc015