2013-04-27 65 views
14

我失去了trilion小時谷歌這但沒有一個解決方案是好的。Symfony2 Doctrine querybuilder其中IN

我有這樣的QueryBuilder:

 $qb2=$this->createQueryBuilder('s') 
     ->addSelect('u') 
     ->innerJoin('s.user','u') 
     ->where("u.id IN(:followeeIds)") 
     ->andWhere('s.admin_status = false') 
     ->setParameter('user', $user) 
     ->setParameter('followeeIds', $arrayFolloweeIds) 
     ->orderBy('s.id','DESC') 
     ->setMaxResults(15) 
    ; 

我可以做第二個查詢,然後做類似$qb->getDQL()但將我緩存查詢?

錯誤:

Invalid parameter number: number of bound variables does not match number of tokens 

回答

47

要設置用戶參數,但我沒有看到它在查詢的任何地方被使用?

我也有問題,與WHERE IN和學說QueryBuilder與陣列也會給我一個類似的錯誤,奇怪的是運行array_values綁定參數之前似乎解決這些問題爲好。

嘗試:

$qb2=$this->createQueryBuilder('s') 
     ->addSelect('u') 
     ->innerJoin('s.user','u') 
     ->where("u.id IN(:followeeIds)") 
     ->andWhere('s.admin_status = false') 
     ->setParameter('followeeIds', array_values($arrayFolloweeIds)) 
     ->orderBy('s.id','DESC') 
     ->setMaxResults(15) 
    ; 
+2

OMG,我感覺如此愚蠢...當然用戶!我沒有注意到它...是的array_values幫助!現在終於幻想工作$ arrayFolloweeIds = implode(「','」,$ arrayFolloweeIds)以及...我希望人們會發現它。謝謝 ! – EnchanterIO 2013-04-27 18:08:46

+0

'array_values'也幫助了我。但爲什麼?我正在使用索引數組。另一方面,使用刪除查詢,它不使用'array_values'。我正在使用doctrine/orm v2.5.4 – alpham8 2017-11-22 13:42:42

+0

我認爲這個問題是由數組上的亂序數字索引或可能具有字符串數字索引引起的。不是100%確定,但如果這就是爲什麼array_values工作的原因,因爲它給了你一個新的數組適當索引 – 2017-11-22 19:43:45

0

在Symfony2.8下面的例子可以幫助我

... 
$qb2->where(
    $qb2->expr()->in('u.id', ':ids') 
) 
->setParameter('ids', $ids_array) 
... 
+0

很好,順便說一句,根據它的值命名變量是一種不好的做法。例如「數組」,「字符串」。一個有意義的名字綽綽有餘:$ id代表ID和$ id,如果它只是一個整數:) – EnchanterIO 2017-11-01 20:03:38

+0

謝謝@EnchanterIO。我同意這種情況。 但PHP不支持顯式類型。那麼我怎麼知道哪種類型的變量正在使用? 作爲例子,我有一個由逗號或session_keys數組分隔的整數列表? 你能給出更多重要的論點嗎?謝謝:) – 2017-11-02 10:08:38

+0

當然。如果你有一個由逗號分隔的整數列表,那麼你沒有一個數組,你有一個字符串。所以我會稱之爲:commaConcatinatedIds。並遷移到PHP 7以獲得嚴格的類型;)如果您有更多的問題,可以通過twitter與我聯繫:https://twitter.com/EnchanterIO – EnchanterIO 2017-11-02 15:11:58

相關問題