Symfony、easyadmin 通过关系过滤

问题描述

我将 Easyadmin 包用于 Web 应用程序的管理部分,并使用如下配置:

easy_admin:
  entities:
    Payment:
      class: App\Entity\Payment
      controller: App\Controller\CompanyController
      label: 'payments'
      list:
        item_permission: ['ROLE_ADMIN','ROLE_COMPANY_OWNER','ROLE_COMPANY_ACCOUNTANT']
        actions: ['show','-delete','-edit','-new']
        collapse_actions: true
        title: 'Payments'
        filters:
          - { property: 'id',label: 'id' }
          - { property: 'type',label: 'type' }
          - { property: 'user',label: 'user' }
          ...

问题是我无法通过实体关系设置过滤器,例如 { property: 'user.company',label: 'company' },它会抛出属性不存在或配置错误的异常。有人知道如何解决这个问题吗?

解决方法

您可以使用静态过滤器(dql_filter 选项) dql_filter 选项允许您定义传递给 Doctrine 查询的 WHERE 子句的条件,用于获取显示在列表和搜索视图中的实体。

例如

easy_admin:
    entities:
        VipCustomers:
            class: App\Entity\User
            list:
                dql_filter: 'entity.budget > 100000'
        RegularCustomers:
            class: App\Entity\User
            list:
                dql_filter: 'entity.budget <= 100000'

在你的情况下,我认为你可以做这样的事情。

easy_admin:
  entities:
    Payment:
      class: App\Entity\Payment
      controller: App\Controller\CompanyController
      label: 'payments'
      list:
        item_permission: ['ROLE_ADMIN','ROLE_COMPANY_OWNER','ROLE_COMPANY_ACCOUNTANT']
        actions: ['show','-delete','-edit','-new']
        collapse_actions: true
        title: 'Payments'
        dql_filter: "user.company"