2015-10-23 10 views
5

私は数時間これに固執しています。configureListFieldsのSonata Adminカスタムクエリ

私はすべてのカテゴリを一覧表示するには、管理者クラスがあり、1つのテーブルの列に関連製品(Productエンティティ)があります。Table example 関連コードは:私がする必要がどのような

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
      ->addIdentifier('name') 
      ->add('products') // Entity Product, @ORM\OneToMany 
      ->add('ord') 
    ; 
} 

が記載されているされることから、非アクティブの製品を隠しています"(boolean)product.active"に基づいていますが、わかりません。私は "createQuery"メソッドについて知っていますが、動作しません。 SQLを生成して直接クエリを実行すると、ここではカテゴリをフィルタリングするためにProxyQueryを使用できるように見えますが、すべての製品は別のクエリでクエリされます(この別のクエリは変更方法がわかりません)。

public function createQuery($context = 'list') 
{ 
    $query = parent::createQuery($context); 

    $q = new ProxyQuery($query->join(sprintf('%s.products', $query->getRootAlias()), 'p') 
      ->andWhere('p.active = :act')->setParameter('act', true)); 

    return $q; 
} 

は、あなたがNULLまたはエンティティと使用クエリーを適応させることquery_builder optionを追加するには、フィールドの種類を変更することができます任意の助け

答えて

1

をありがとう:

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('name') 
     ->add('products', null, array(
      'query_builder' => function(EntityRepository $er) { 
       return $er->createQueryBuilder('qb') 
          ->leftjoin('qb.products', 'p') 
          ->where('p.active = :act') 
          ->setParameter('act', true) 
      } 
    )); 
} 

私がテストしていませんそれはoneToMany関係を持っています。

はお返事のために、このtopic

+0

おかげでいくつかの情報がありますが、私はまだそれを動作させることはできません。 'query_builder'は何らかの形で使用されていないようです。私はdie()を入れてみました。その機能では何も起こりません。 –

+0

名前だけでなく、EntityRepositoryへのパスを必ず含めてください:)それは私の魅力のように働いていました – Cowwando