Применить фильтр к списку SonataAdmin - PullRequest
0 голосов
/ 29 января 2020

У меня есть backoffice под SonataAdmin и класс ForumAdmin, и этот класс определяет список полей, которые отображаются в шаблоне списка форумов.

Что-то вроде этого:

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper->addIdentifier('name');
    $listMapper->addIdentifier('description');
    $listMapper->addIdentifier('category');
    $listMapper->addIdentifier('weight');
    $listMapper->addIdentifier('createdAt');
    $listMapper->addIdentifier('updatedAt');
    $listMapper->add('imageName', FileType::class, ['template' => 'Admin/ForumAdmin/image.html.twig']);
}

Это работает совершенно нормально. Я получаю все форумы с этими полями.

Но теперь я бы хотел по умолчанию применить фильтр. Я не хочу, чтобы все форумы появлялись в списке, но, например, только те, у кого есть категория (которая является другой сущностью), равны указанному c значению.

Есть ли способ справиться с этим? Я предполагаю, что хочу сделать ту же работу, что и DatagridMapper, но я хочу сделать это уже перед генерацией списка.

Спасибо за вашу помощь

РЕДАКТИРОВАТЬ: я увидел что-то, говорящее использовать createQuery function

public function createQuery($context = 'list')
{
    $query = parent::createQuery($context);
    $query->andWhere(
        $query->expr()->eq($query->getRootAliases()[0] . '.my_field', ':my_param')
    );
    $query->setParameter('my_param', 'my_value');
    return $query;
}

Проблема:

Метод 'andWhere' не найден в \ Sonata \ AdminBundle \ Datagrid \ ProxyQueryInterface

...