Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony-使用递归表在ChoiceType上创建组_Symfony - Fatal编程技术网

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')完成查询(尽管您的别名在这里似乎很奇怪)