我的表格看起来像这样
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
我不知道树木的深度。
答案 0 :(得分:1)
我知道这个问题很旧,但是也许有人仍然可以从我的答案中受益。
在显示树时,必须在我的示例下面按“左”顺序对其进行排序:
->add('parent', EntityType::class,
array(
'class' => Menu::class,
'choice_label' => function(Menu $menu) {
return TreeHelper::getIndentForTreeElement($menu) . ' ' . $menu->getTitle();
},
'query_builder' => function(EntityRepository $em) {
return $em->createQueryBuilder('t')->orderBy('t.lft', 'ASC');
}
)
)
树的深度或父ID无关紧要,只要树的左右值正确构建即可。