2012-11-09 20 views
6

我想知道天氣是否可能以及如何爲Symfony 2中的SonataAdminBundle配置列表視圖的過濾器隨着SonataAdminBundle。在兩步相關實體上配置過濾器

說我有實體Order,指向實體用戶,指向實體公司。 我想配置篩選器既可以篩選用戶,也可以篩選公司(用戶的公司) 第一個很簡單。其次是我試圖澄清。

在課堂上OrderAdmin我將覆蓋configureDatagridFilters爲:

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper 
     ->add('created_at') 
     //... some other filters on Order fields, as usual 

     // the filter on User, provided 'user', no ploblem 
     ->add('user') 

     // and the filter by Company 
     ->add('user.company') // this doesn't work, of course 
    ; 
} 

爲該公司過濾器語法由sonta文檔inpired:http://sonata-project.org/bundles/doctrine-orm-admin/2-0/doc/reference/filter_field_definition.html

不打算爲我試着acomplish,但不能找到在哪裏看。

希望有人對此有所瞭解。

感謝

回答

15

最後我發現這個問題,其他的導遊回答:How can I create a custom DataGrid filter in SonataAdmin和奏鳴曲管理員文檔的仔細讀取鏈接我在我的問題粘貼。

如果有人有這個問題,並採取在前面的例子:

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper 

     //... whatever filter 

     // and the filter by Company 

     ->add('company', 'doctrine_orm_callback', array(
      'callback' => array($this, 'callbackFilterCompany'), 
      'field_type' => 'checkbox' 
      ), 
    'choice', 
    array('choices' => $this -> getCompanyChoices()) 
; 
} 

其中該方法getCompanyChoices檢索公司ID的關聯數組=>公司名稱(例如)。並且該方法callbackFilterCompany如下

public function callbackFilterCompany ($queryBuilder, $alias, $field, $value) 
{ 
    if(!is_array($value) or !array_key_exists('value', $value) 
     or empty($value['value'])){ 

     return; 

    } 

    $queryBuilder 
    ->leftJoin(sprintf('%s.user', $alias), 'u') 
    ->leftJoin('u.company', 'c') 
    ->andWhere('c.id = :id') 
    ->setParameter('id', $value['value']) 
    ; 

    return true; 
} 
+0

幫我帶一個小的變化:不是空($值「值」])我寧願is_null($ value ['value']),因爲empty(int(0))的計算結果爲true。非常感謝您的解決方案。 –

相關問題