2013-04-15 61 views
7

經過多次嘗試,我想我終於知道文檔的內心。 然後,我需要你們的幫助。我不明白爲什麼學說告訴我這個錯誤:主義setParameter和無效的參數號

非法參數編號:綁定變量的數量不符 令牌數量

這裏我的代碼:

$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]'是否爲空? – cheesemacfly

回答

7

我很抱歉..我剛剛發現我的錯誤..後來,在我的代碼更晚的時候..我用我的舊「$ qb」鍵入一個新的查詢.. 我真是一個小菜!

+0

@sroes was那麼:) – Ejaz

+0

準確!他是對的^^ –

8

我推測 - > setParameter覆蓋了前一個。

對於多個參數使用:

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

見學說升級:

從現在開始,在查詢中的參數是一個ArrayCollection而不是簡單的陣列。這>會嚴重影響setParameters()的使用,因爲它不會再追加參數>來查詢,但實際上會覆蓋已定義的參數。每當你檢索>參數(即$查詢 - >的getParameter(1))

Doctrine Upgrade Description

也許這也適用於的setParameter?

+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'); 

希望這可以幫助別人。

相關問題