2017-06-06 13 views
2

私はsymfonyのに新たなんだ、とクエリの実行中に、私はエラーを得た:symfonyの3つのパラメーターが多すぎ

public function getFilteredArticles($page, $nbPerPage, $data) { 
     $query = $this->createQueryBuilder('a') 
       ->leftJoin('a.images', 'i') 
       ->addSelect('i') 
       ->leftJoin('a.type_stockage', 't') 
       ->addSelect('t') 
       ->leftJoin('a.famille', 'f') 
       ->addSelect('f'); 
     if ($data['famille'] != '') { 
      $query->where('f.id = :famille') 
        ->setParameter('famille', $data['famille']); 
     } 
     if ($data['rds'] == false) { 
      $query->where('a.stock_actuel > 0'); 
     } 
     if ($data['recherche'] != '' && $data['recherche'] != null) { 
      $query->where('a.ref_article LIKE :recherche') 
        ->setParameter('recherche', '%' . $data['recherche'] . '%'); 
     } 
     $query->leftJoin('a.sousfamille', 's') 
       ->orderBy('a.ref_article', 'ASC') 
       ->getQuery(); 

     $query->setFirstResult(($page - 1) * $nbPerPage) 
       ->setMaxResults($nbPerPage); 

     return new Paginator($query, true); 
    } 

このクエリは、あなたが見ることができるようconditionnalsパラメータを持っているが、それは私が必要とする記事のリストを返します。テーブルのために。 「:クエリが0のパラメータを定義して、あなたは1をバインドすぎる 多くのパラメータ」

例外は、テンプレートのレンダリング中にスローされました(:私は私のテーブルを埋めるために、このクエリを実行するときしかし、私はエラーを得ました)。

私はなぜ彼が0のパラメータを期待しているのかわかりません。代わりにsetParametersを使ってみましたが、結果は同じです。

アイデアはありますか?

答えて

8

where()の代わりにandWhere()メソッドを使用する必要があります。
where()メソッドは、前のすべての場所を削除しますが、setParameter()は削除しません。だから彼はどこよりも多くのパラメータを見つけたのです。

この種のエラーを回避するために、条件が最初の条件でないとわからない場合は、私は個人的に決してwhereを使用しません。

if ($data['famille'] != '') { 
     $query->andWhere('f.id = :famille') 
       ->setParameter('famille', $data['famille']); 
    } 
    if ($data['rds'] == false) { 
     $query->andWhere('a.stock_actuel > 0'); 
    } 
    if ($data['recherche'] != '' && $data['recherche'] != null) { 
     $query->andWhere('a.ref_article LIKE :recherche') 
       ->setParameter('recherche', '%' . $data['recherche'] . '%'); 
    } 

where() PHPドキュメント

は、クエリ結果の一つ以上の制限を指定します。
以前に指定された制限があれば置き換えます。

andWhere() PHPドキュメント

以前に指定された制約の論理 組み合わせを形成する、クエリの結果への1つ以上の制限を追加します。

+0

ありがとうございます!それは今うまく動作:) – AKM

関連する問題