6

我有与“用户”相关的实体“操作”。在 SonataAdminBundle 中创建了 Admin CRUD 控制器。一切正常,除了用户过滤器呈现为下拉列表。我有 8k 用户数并且还在增长,所以你必须明白为什么这是一个问题。
我希望用户过滤器是文本输入并提交以进行搜索LIKE %username%

现在我添加这样的用户过滤器 - $datagridMapper->add('user')

我知道我可以添加过滤器类型和字段类型,但我无法找到正确的组合和选项。在http://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/filter_field_definition.html上找到信息,但仍然没有成功。

最终解决方案

在亚历克斯多哥回答之后,我使用了以下代码:

$datagridMapper->add('user', 'doctrine_orm_callback', array(
'callback' => function($queryBuilder, $alias, $field, $value) {
    if (empty($value['value'])) {
        return;
    }
    $queryBuilder->leftJoin(sprintf('%s.user', $alias), 'u');
    $queryBuilder->where('u.username LIKE :username');
    $queryBuilder->setParameter('username', '%'.$value['value'].'%');
    return true;
},
'field_type' => 'text'
))
4

2 回答 2

5

我在一个项目中需要这样的东西。我使用这个实现了这个功能。您可以尝试将“field_type”选项设置为“text”(我在我工作的项目中使用了“choice”)并添加您需要过滤的查询构建器操作。

于 2014-04-25T11:54:49.633 回答
4

使用学说_orm_choice选项。

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper->add(
            'module',
            'doctrine_orm_choice',
            [],
            'choice',
            [
                'choices' => $this->filterModuleList
            ]
        )

        ....
于 2014-05-16T13:57:52.427 回答