2013-04-15 23 views
7

多くの試みの後、私は最終的にはドキュメントを心得ていると思います。Doctrine setParameterと無効なパラメータ番号

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

の 数と一致していませんがここにあるDoctrineは私にこのエラーを表示し、なぜ はその後、私はあなたの助けが必要..私は理解していません私のコード:

$qb = $this->em->createQueryBuilder(); 
$qb->select('m') 
    ->from('Entities\Marque', 'm') 
    ->leftJoin('m.magasin', 'ma') 
    ->where('m.nom = :marque AND ma.nom LIKE :magasin') 
    ->setParameter('marque', $marque) 
    ->setParameter('magasin', '%'.$matchesNumber[1].'%'); 
$results = $qb->getQuery()->getArrayResult(); 

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

+6

おそらく、後で$ db->どこを呼びますか?これは、既存のwhereステートメントを上書きします。 – sroes

+0

いいえ、where文の唯一の用途です。 –

+0

'$ marque'と' $ matchesNumber [1] 'はnullではありませんか? – cheesemacfly

答えて

7

大変申し訳ございません。私のエラーが見つかりました。後で、私のコードでもっと後で...私の古い "$ qb"で新しいクエリを入力しました。 私はそういうふうです!

+0

@sroes右::) – Ejaz

+0

まさに!彼は正しかった^^ –

8

私はpresume - > setParameterが前のものを上書きします。複数のパラメータの

は使用:

->setParameters(['key1' => $value1, 'key2' => $value2]) 

参照Doctrineはアップグレード:

を今から、クエリのパラメータは、ArrayCollectionの代わりに、単純な配列です。これはsetParameters()の使用に多大な影響を与えます。なぜなら、それはもはやパラメータをクエリに追加するのではなく、すでに定義されているパラメータをオーバーライドするからです。たび、あなたは>パラメータ(すなわち。$ query->のgetParameter(1))

Doctrine Upgrade Description

はたぶんもs​​etParameterを使用に適用される取得していますか?

+0

私は既に ' - > setParameters(['marque' => $ marque、 'magasin' => '%'、$ matchesNumber [1]。 '%']);'しかし、変更はありませんでした.. –

4
$qb = $this->em->createQueryBuilder(); 
$parameters = array('marque'=>$marque, 'magasin'=>'%'.$matchesNumber[1].'%'); 
$qb->select('m') 
    ->from('Entities\Marque', 'm') 
    ->leftJoin('m.magasin', 'ma') 
    ->where('m.nom = :marque') 
    ->andWhere('ma.nom LIKE :magasin') 
    ->setParameters($parameters); 

$results = $qb->getQuery()->getArrayResult(); 
10

これは私が一度起こった複数のwhere()を誤って使用した場合にも発生します。

$em = $this->getEntityManager(); 
$query = $em->createQueryBuilder() 
    ->from('AppBundle:SomeEntity', 's') 
    ->select('s') 
    ->where('s.foo = :foo') 
    ->where('s.bar = :bar') // <- HERE 
    ->setParameter('foo', 'Foo Value') 
    ->setParameter('bar', 'Bar Value'); 

は次のようになります。

$em = $this->getEntityManager(); 
$query = $em->createQueryBuilder() 
    ->from('AppBundle:SomeEntity', 's') 
    ->select('s') 
    ->where('s.foo = :foo') 
    ->andWhere('s.bar = :bar') // <- CHANGE TO andWhere() 
    ->setParameter('foo', 'Foo Value') 
    ->setParameter('bar', 'Bar Value'); 

これは誰かに役立ちます願っています。

関連する問題