我有一个实体‘主题’本身的引用。简而言之,一个“主题”可以有一个“主题”父级。它只能有一个级别。
请看我的表格:
我想要以下结果
我在类型中进行了自定义查询,但它不起作用。
->add('theme',
EntityType::class,
[
'class' => Theme::class,
'query_builder' => function (ThemeRepository $repo) use ($options) {
$query = $repo->createQueryBuilder('p');
$query->leftJoin(
Theme::class, // Entity
'c', // Alias
Join::WITH, // Join type
'p.parent = c.id' // Join columns
);
$query->where($query->expr()->isNotNull('p.parent'))
;
return $query;
},
'group_by' => 'name',
'choice_label' => 'name',
]);
我能得到的最好的结果是:
也许问题出在"group_by“或"choice_label”属性上,因为实际上它是具有不同角色的相同column...but :)
你能帮我吗?
谢谢
发布于 2020-08-01 05:29:59
在您的情况下,"group_by“选项是很好的选择。但您必须按父名称分组,而不是按当前条目名称分组。如果你看一下这个选项https://symfony.com/doc/current/reference/forms/types/choice.html#group-by的文档,你会发现你可以在这里回调!
答案应该是这样的:
[
// ... Your other options
'group_by' => ($choice, $key, $value) {
if (!$choice instanceof Theme) {
return null;
}
return $choice->getParent()->getName();
}
]
我不记得在这里是否必须使用$choice或$value参数,但我认为这在这里并不重要,因为它是一个EntityType。如果你的主题没有父主题,可能需要额外的检查。
此外,在这里使用Doctrine会有很多自动查询,因为您没有在查询结果中添加父元素。为了避免这种情况,您可以使用->addSelect('c')来完成您的查询(尽管您的别名在这里似乎很奇怪)。
https://stackoverflow.com/questions/63194817
复制相似问题