Фильтр сетки данных для объекта отношения в виде текстового поля (в раскрывающемся списке) в администраторе сонаты в Symfony 2.4

У меня есть сущность "Действие" по отношению к "Пользователю". Создан Admin CRUD контроллер в SonataAdminBundle. Все работает отлично, за исключением пользовательского фильтра, который отображается как выпадающий список. У меня 8000 пользователей и растет, поэтому вы должны понять, почему это проблема.
Я хочу, чтобы пользовательский фильтр был для ввода текста и отправки для поиска с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'
))

2 ответа

Решение

Мне нужно что-то подобное в проекте. Я реализовал эту функцию с помощью этого. Вы можете попытаться установить для параметра 'field_type' значение 'text' (я использовал 'choice' в проекте, над которым я работал) и добавить действия построителя запросов, которые необходимо отфильтровать.

Используйте параметр doctrine_orm_choice.

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

        ....
Другие вопросы по тегам