简体   繁体   English

如何在Sonata Admin Bundle中的数据网格关系中获取NULL作为选项?

[英]How to get NULL as an option in a datagrid relation in sonata admin bundle?

I added the following to a Sonata admin in order to filter by category. 我将以下内容添加到了Sonata管理员中,以便按类别进行过滤。 However, the list does not show NULL as an option for category. 但是,列表没有显示NULL作为类别的选项。 I want also want to be able to filter by category for when category is NULL instead of an entity. 我还希望能够按类别过滤类别为NULL而不是实体的类别。

How can one achieve this? 一个人怎么能做到这一点? My current configuration: 我当前的配置:

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

Try this: 尝试这个:

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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM