简体   繁体   中英

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. However, the list does not show NULL as an option for category. I want also want to be able to filter by category for when category is NULL instead of an entity.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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