【问题标题】:SonataAdminBundle, filtering by function resultSonataAdminBundle,按函数结果过滤
【发布时间】:2015-08-04 11:03:06
【问题描述】:

在我的 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'
    ));

【问题讨论】:

  • 您可以创建自己的过滤器类型,无论您的标准是什么,我都根据自己的需要创建了一个具有数字范围过滤器Sonata-admin-number-range-filter

标签: php symfony sonata-admin


【解决方案1】:

查看文档中的教义_orm_callback: https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/filter_field_definition.html

$datagridMapper->add('title') ->添加('启用') ->add('tags', null, array(), null, array('expanded' => true, 'multiple' => true)) ->添加('作者') ->添加('with_open_cmets','doctrine_orm_callback',数组( // 'callback' => array($this, 'getWithOpenCommentFilter'), '回调' => 函数($queryBuilder,$alias,$field,$value){ if (!$value['value']) { 返回; } $queryBuilder->leftJoin(sprintf('%s.cmets', $alias), 'c'); $queryBuilder->andWhere('c.status = :status'); $queryBuilder->setParameter('status', Comment::STATUS_MODERATE); 返回真; }, 'field_type' => '复选框' ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2013-01-13
    • 2016-11-02
    • 1970-01-01
    • 2023-04-11
    • 2021-11-26
    • 1970-01-01
    • 2013-12-22
    相关资源
    最近更新 更多