2017-03-06 78 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