如何过滤具有 ManyToMany 关系的列表
How to filter list with relation ManyToMany
我尝试使用 EasyAdmin,它看起来非常棒。
我想做这个,但我找不到怎么做。
我有一些 "projects",可以有很多 "managers"(我在这两个实体之间有 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) 转换为数组,它是一个集合,并在菜单中使用 like 进行过滤(例如 1,但通常与连接的用户一起使用)。
谢谢,
您可以从 documentation.
中获得一些有用的信息
因此,我完成了类似的任务,创建自定义控制器并重写 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...
我尝试使用 EasyAdmin,它看起来非常棒。 我想做这个,但我找不到怎么做。
我有一些 "projects",可以有很多 "managers"(我在这两个实体之间有 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) 转换为数组,它是一个集合,并在菜单中使用 like 进行过滤(例如 1,但通常与连接的用户一起使用)。
谢谢,
您可以从 documentation.
中获得一些有用的信息因此,我完成了类似的任务,创建自定义控制器并重写 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...