【问题标题】: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',直接调用了别名。
这个解决方案对我有用。