【问题标题】:Symfony EasyAdminBundle: Dql Filter entities in assotiation field on List not worrkingSymfony EasyAdminBundle:列表上关联字段中的 Dql 过滤实体不起作用
【发布时间】:2018-11-25 09:57:16
【问题描述】:

我有一个关联字段类型(相关实体列表)的表单。

存在带有字段实体“TypeQuizz”(@ORM\ManyToOne)的测验实体。 无法使用 DQl 过滤器来显示列表测验。

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Challenge\TypeQuizz")
 * @ORM\JoinColumn(nullable=false)
 */
private $typeQuizz;

无法根据TypeQuizz实体的codeTypeQuizz显示测验列表

文件配置 EasyAdmin.yaml

使用 DQL 过滤器从实体 Quizz 访问属性关联 TypeQuizz 时出错

如何对属性关联实体应用 Dql 过滤器?

【问题讨论】:

    标签: symfony doctrine-orm symfony-forms symfony2-easyadmin


    【解决方案1】:

    我为支持实体关联覆盖了方法 createListQueryBuilder

    <?php
    namespace App\Controller\Admin;
    
    use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
    
    class QuizzChallengeController extends BaseAdminController
    {
        protected function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null)
        {
            /* @var EntityManager */
            $em = $this->getDoctrine()->getManagerForClass($this->entity['class']);
            /* @var DoctrineQueryBuilder */
            $queryBuilder = $em->createQueryBuilder()
                ->select('entity')
                ->from($this->entity['class'], 'entity')
                ->leftJoin('entity.typeQuizz','typeQuizz');
    
            if (!empty($dqlFilter)) {
                $queryBuilder->andWhere($dqlFilter);
            }
    
            if (null !== $sortField) {
                $queryBuilder->orderBy('entity.'.$sortField, $sortDirection ?: 'DESC');
            }
    
            return $queryBuilder;
        }
    }
    

    我修改了.yml文件中的dql_filter,删除了'entity',直接调用了别名。

    这个解决方案对我有用。

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多