2017-03-06 19 views
1

だから、次の教義クエリ持っている:私はgetQuery()を実行したときに無効なパラメータ番号教義

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

iは次の例外メッセージが表示されましたが:

無効なパラメータ番号:バインド変数の数

:私は私の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つだけの値をバインドする必要があると思って以来、私のクエリで何が間違っているのか分からない。

ありがとうございました。

+0

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

+0

整数。エンティティのプライマリID。 – iamjc015

答えて

2

->setParameter('groupId', $params['rootGroup']->getId()) $ qbに移動します。 getDQL()は、値ではなくパラメータ名でdqlを返します。

+0

それは働いた。ありがとう。これを答えとして受け入れます。 – iamjc015

関連する問題