2015-03-31 87 views
0

我將以下內容添加到Sonata管理員中,以便按類別進行過濾。但是,該列表不顯示NULL作爲類別的選項。我還希望能夠按類別過濾類別爲NULL而不是實體。如何在奏鳴曲管理包中的數據網格關係中獲得NULL作爲選項?

怎樣才能做到這一點?我目前的配置:

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper 
     ->add("category"); 
} 

回答

0

試試這個:

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper->add("category", 'doctrine_orm_callback', array(
     'callback' => function ($queryBuilder, $alias, $field, $value) { 
       /** 
       * @var QueryBuilder $queryBuilder 
       */ 
       if ($value['value']) { 
        if ($value['value'] == 0) { 
         $queryBuilder->andWhere($queryBuilder->expr()->isNull($alias.'.category')); 
         return true; 
        } else { 
         $category = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager')->getReference('AcmeBundle:Category', $value['value']); 
         $queryBuilder->andWhere($queryBuilder->expr()->eq($alias.'.category', $category)); 
         return true; 
        } 
       } 
      }, 
     'field_type' => 'choice', 
     'field_options' => array(
      'choices' => $this->getCategoryChoices()   
     ), 
     'label' => 'Category' 
    )); 
} 

private function getCategoryChoices() 
{ 
    $categories = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager')->getRepository('AcmeBundle:Category')->findAll(); 

    $choices["0"] = "NULL"; 
    foreach($categories as $category) { 
     $choices["{$category->getId()}"] = $category->getName(); 
    } 

    return $choices; 
} 
相關問題