我有一个带有关联字段类型的表单(相关实体列表)。
Quizz实体具有字段实体“TypeQuizz”(@ORM \ ManyToOne)。 无法使用DQl过滤器显示列表Quizz。
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Challenge\TypeQuizz")
* @ORM\JoinColumn(nullable=false)
*/
private $typeQuizz;
无法根据TypeQuizz实体的codeTypeQuizz显示测验列表
文件配置EasyAdmin.yaml
使用DQL过滤器无法从实体Quizz访问属性关联TypeQuizz时出错
如何在属性关联实体上应用Dql Filter?
答案 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
这对我来说是解决方案。