Sonata / Symfony使用MongoDB过滤为空

问题描述

我正在尝试在Sonata admin中自定义一个过滤器,该过滤器返回在一个特定字段上具有空值的所有对象...在MySQL中,我曾经使用一个函数来获取为null的空值。 我正在尝试做同样的事情,但是这次使用mongo会产生一个错误,即未定义isull函数。有什么功能类似于odm中使用的形式吗? 我的代码如下:

->add("isRoot",'doctrine_mongo_callback',array(
                'callback' => function ($queryBuilder,$alias,$field,$value) {
                        /**
                         * @var QueryBuilder $queryBuilder
                         */
                        if ($value['value']) {
                            if ($value['value'] == 0) {
                                $queryBuilder->andWhere($queryBuilder->expr()->isNull($alias.'.mainCategory'));
                                return true;
                            } else {
                               $category = $this->getConfigurationPool()->getContainer()->get('doctrine_mongodb.odm.document_manager')->getReference(ArticleCategory::class,$value['value']);
                               $queryBuilder->andWhere($queryBuilder->expr()->eq($alias.'.category',$category));
                                return true;
                            }
                        }
                    },'field_type' => ChoiceType::class,'field_options' => array(
                    'choices' => $this->getCategoryChoices()        
                ),'label' => 'mainCategory'
            ));
        }

ODM中是否有类似于ORM中的isNull的函数? 以下是错误: 尝试调用类“ Doctrine \ ODM \ MongoDB \ Query \ Expr”的名为“ isNull”的未定义方法。

解决方法

所以我想到了如何查询而不是

$queryBuilder->andWhere($queryBuilder->expr()->isNull($alias.'.mainCategory'));

使用以下内容: $ queryBuilder-> field('mainCategory')-> equals(null);

我在以下链接上看到了此解决方案:enter link description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...