Symfony EasyAdminBundle:列表中的assotiation字段中的Dql过滤实体没有问题

时间:2018-06-15 14:24:40

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

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

Quizz实体具有字段实体“TypeQuizz”(@ORM \ ManyToOne)。 无法使用DQl过滤器显示列表Quizz。

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

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

文件配置EasyAdmin.yaml enter image description here

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

enter image description here

如何在属性关联实体上应用Dql Filter?

1 个答案:

答案 0 :(得分: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;
    }
}

文件配置EasyAdmin.yaml enter image description here

这对我来说是解决方案。