【发布时间】:2017-05-07 19:42:45
【问题描述】:
我的桌子是这样的
categories:
- id
- name
- parent
在我的表单中,您可以选择多个类别。我正在将此代码用于表单构建器
->add('categories', EntityType::class, [
'class' => 'AppBundle:CourseCategory',
'choice_label' => function(CourseCategory $category) {
return \AppBundle\Helper::categoryIndent($category) . ' ' . $category->getName();
},
'multiple' => true,
'expanded' => true,
'query_builder' => function(EntityRepository $er) {
return $er
->createQueryBuilder('u')
->orderBy('u.parent');
},
'choice_attr' => function($category, $key, $index) {
$attrs = [];
$attrs['data-id'] = $category->getId();
$attrs['class'] = 'tree-item';
if($category->getParent() != null) {
$attrs['data-parent'] = $category->getParent()->getId();
}
return $attrs;
}
])
到目前为止这不起作用,因为orderBy 语句是错误的......
这里如何得到递归树结构?
编辑
我想要达到的效果如下所示:
Category
Subcategory 1
Subcategory 2
Sub-subcategory 1
Subcategory 3
Category
Subcategory
我确实不知道树的深度。
【问题讨论】:
-
排序和树形结构一样无关。你到底想达到什么目的?您是否尝试显示嵌套树?你的树的深度是多少?有限制吗?它是已知的还是未知的?您的实际策略可能适用于有限的深度(至 1),但会很痛苦。
-
已编辑条目。
-
尝试将
'group_by' => 'parent'添加到您的类型选项中,其中 parent 是您实体中的字段名称。 -
尝试添加
group_by,但还是不行。顺序完全错误(它是类别 1、类别 2、子类别 1、子类别 2、子子类别 1)。 -
您为什么要通过
u.parent订购?我猜你可能想按身份证或姓名订购?不是吗?