在我的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'
));
答案 0 :(得分:0)
在文档中查看doctrine_orm_callback: https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/filter_field_definition.html
$datagridMapper->add('title') ->add('enabled') ->add('tags', null, array(), null, array('expanded' => true, 'multiple' => true)) ->add('author') ->add('with_open_comments', 'doctrine_orm_callback', array( // 'callback' => array($this, 'getWithOpenCommentFilter'), 'callback' => function($queryBuilder, $alias, $field, $value) { if (!$value['value']) { return; } $queryBuilder->leftJoin(sprintf('%s.comments', $alias), 'c'); $queryBuilder->andWhere('c.status = :status'); $queryBuilder->setParameter('status', Comment::STATUS_MODERATE); return true; }, 'field_type' => 'checkbox' ));