Как отфильтровать список с отношением ManyToMany - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь использовать EasyAdmin, который выглядит очень замечательно. Я хотел бы сделать это, но я не могу найти How.

У меня есть несколько "проектов", которые могут иметь много "менеджеров" (у меня есть отношения ManyToMany между этими двумя объектами). Когда менеджер входит в систему с EasyAdmin, я хотел бы перечислить только его проекты в списке проектов. Я пытаюсь использовать фильтры, но я не вижу, что бы поставить в качестве ограничения только для проектов моего пользователя.

У вас есть идея? Возможно ли это сделать?

easy_admin:
    site_name: 'PTUT MMI'
    list:
        actions: ['show']
    formats:
        date:     'd/m/Y'
        time:     'H:i'
        datetime: 'd/m/Y H:i:s'
    user:
        display_name: true
        display_avatar: false
    design:
        menu:
            # only users with the ROLE_SUPER_ADMIN role will see this menu item
            - { entity: 'Projet', permission: ['ROLE_ADMIN',] }
            - { icon: user-cog, label: 'Mes Projets', entity: ProjetsResponsable, params: { action: list, filters: { responsables: { comparison: like, value: [1] } } } }
            - { entity: 'User', permission: ['ROLE_ADMIN'] }
            - { entity: 'Etudiant', permission: ['ROLE_RESPONSABLE'] }
    entities:
#        # List the entity class name you want to manage
        ## Entités pour l'admin
        Projet:
            class: App\Entity\Projet
        User:
            class: App\Entity\User
        ## Entités pour le responsable
        ProjetsResponsable:
            class: App\Entity\Projet
            list:
                filters:
                    - { property: responsables, type: array }
        Etudiant:
            class: App\Entity\User

Я пытаюсь преобразовать Responsables (manager) в массив, это коллекция, и фильтровать как в меню (с 1 для примера, но обычно с подключенный пользователь).

Спасибо,

1 Ответ

1 голос
/ 31 марта 2020

некоторая полезная информация, которую вы можете получить из документации .

Итак, я выполнил аналогичную задачу, создав собственный контроллер и переопределив метод createListQueryBuilder, чтобы получить собственный список для каждого пользователя. Итак, в вашем примере это будет примерно так:

class ProjetsResponsable extends BaseEasyAdminController
{
    protected function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null)
    {
        if (null === $dqlFilter) {
            $dqlFilter = sprintf('entity.user = %s', $this->getUser()->getId());
        } else {
            $dqlFilter .= sprintf(' AND entity.user = %s', $this->getUser()->getId());
        }

        return parent::createListQueryBuilder($entityClass, $sortDirection, $sortField, $dqlFilter);
    }
}

А потом в конфиге:

entities:
    ProjetsResponsable:
        class: App\Entity\Projet
        controller: App\Controller\ProjetsResponsable
        list:
            fields:
                #fields...
...