Symfony-使用递归表在ChoiceType上创建组
我有一个实体的“主题”,它本身就是参照物。 简而言之,“主题”可以有一个“主题”父级,它只能有一个级别 见我的表格: 我想要下面的结果 我在类型中进行了自定义查询,但它不起作用Symfony-使用递归表在ChoiceType上创建组,symfony,Symfony,我有一个实体的“主题”,它本身就是参照物。 简而言之,“主题”可以有一个“主题”父级,它只能有一个级别 见我的表格: 我想要下面的结果 我在类型中进行了自定义查询,但它不起作用 ->add('theme', EntityType::class, [ 'class' => Theme::class, 'query_builder' => function (ThemeRepository $repo) use ($options) { $que
->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\u by”或“choice\u label”属性,因为实际上它是同一列……但角色不同:)
你能帮我吗
谢谢在您的情况下,“分组依据”选项是很好的选择。但是您必须按照父项名称而不是当前条目名称进行分组。如果您查看此选项的文档,您可以看到您可以在此处进行回调
答案应该与此类似:
[
// ... Your other options
'group_by' => ($choice, $key, $value) {
if (!$choice instanceof Theme) {
return null;
}
return $choice->getParent()->getName();
}
]
我不记得这里是否必须使用$choice或$value参数,但我认为这并不重要,因为它是EntityType。
如果你的主题也没有父对象,可能需要额外检查
此外,由于您没有在查询结果中添加父项,因此在这里您将有很多使用条令的自动查询。为了避免这种情况,您可以使用->addSelect('c')完成查询(尽管您的别名在这里似乎很奇怪)