SonataAdminBundle,按功能结果过滤


SonataAdminBundle, filtering by function result

在我的Symfony项目中,我使用SonataAdminBundle。我有一个问题:例如,我有一个带有函数的实体:

class Entity {
protected $id;
public idBiggerThan($value) {
     return $id > $value;
}

我想创建一个过滤器,通过这个函数的结果过滤列表(例如,能够只选择id大于当前用户的实体)。

我明白这个过滤器可以不使用这个函数来编写,但是我有更复杂的函数,我不想为此编写查询。

谢谢你的帮助。

UPD:我试过这样做,但它不起作用

$datagridMapper
    ->add('id', 'doctrine_orm_callback', array(
        'callback' => 
            function($queryBuilder, $alias, $field, $value) {
                if (!$value['value']) {
                    return;
                }
                $queryBuilder
                    ->where($alias . '. idBiggerThan(:current_user)')
                    ->setParameter('current_user', $this->getCurrentUser()->getId());
            },
        'field_type' => 'checkbox'
    ));

看一下文档中的doctrine_orm_callback:https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/filter_field_definition.html

<>之前$ datagridMapper ->添加("标题")->添加(启用)->add('tags', null, array(), null, array('expanded' => true, 'multiple' => true))->添加(作者)->add('with_open_comments', 'doctrine_orm_callback', array()//'callback' => array($this, 'getWithOpenCommentFilter'),'callback' => function($queryBuilder, $alias, $field, $value) {$value['value']) {返回;}$queryBuilder->leftJoin(sprintf('%s.comments', $alias), 'c');queryBuilder ->引入(c。状态=:状态');queryBuilder -> setParameter("地位",评论::STATUS_MODERATE);返回true;},'field_type' => 'checkbox'));