Symfony 2中的条令树路径迭代

Symfony 2中的条令树路径迭代,symfony,doctrine-orm,doctrine-extensions,stofdoctrineextensions,Symfony,Doctrine Orm,Doctrine Extensions,Stofdoctrineextensions,我有一个变量$path,它包含兄弟类别名称的数组。使用这个变量,我想创建一个新数组$categories\u children,它将包含$path数组中每个类别的子数组,这些子数组根据其标题。我正在使用Gediminas Morkevicius的扩展,我已经尝试过: $em = $this->getDoctrine()->getManager(); $repo = $em->getRepository('MyProjectAdminBundle:Category

我有一个变量$path,它包含兄弟类别名称的数组。使用这个变量,我想创建一个新数组$categories\u children,它将包含$path数组中每个类别的子数组,这些子数组根据其标题。我正在使用Gediminas Morkevicius的扩展,我已经尝试过:

    $em = $this->getDoctrine()->getManager();
    $repo = $em->getRepository('MyProjectAdminBundle:Category');

    $category = $repo->findOneById($id);       
    $path = $repo->getPath($category);

    $categories_children = array();

    foreach($path as $node){
        $parent = $repo->findOneByTitle($node);
        $categories_children[] = $repo->getChildren($parent, true);
    }

问题是,当传递的参数为NULL时,参数为$parent的方法getChildren()返回与like相同的数组。这意味着它将返回以根开始的所有节点,而不是以所选类别开始。在$parent变量中使用的findonebytle()方法不接受getPath()中的参数,其行为为NULL。

getChildren
$parent参数仅指定从哪个根元素获取树。您可以在
nestedtreepository
中查看
childrenQueryBuilder
函数的代码

要获取所有孩子,我使用存储库中自己的函数

public function getTreeAsFlatArray( AbstractTreeNode $parent = null, array $options = array() ) {
    $qb = $this->createQueryBuilder('node');    
    $qb
        ->andWhere('node.lft > :parent_lft')
            ->setParameter('parent_lft', $parent->getLft() )
        ->andWhere('node.lft < :parent_rgt')
            ->setParameter('parent_rgt', $parent->getRgt() )
        ->andWhere('node.level <= :level')
            ->setParameter('level', $parent->getLevel() + $o['depth'])
        ->andWhere('node.root = :root')
            ->setParameter('root', $parent->getRoot())
    ;

    ...
}   

现在,当我使用getTreeAsFlatArray($parent)时,它返回“FatalErrorException:Error:调用非对象上的成员函数getLft()”。这只是一个示例查询,您可以如何获取节点的子节点,节点准备好使用函数。好的,我将调整getTreeAsFlatArray()以供我使用。我还尝试在实体中使用childs字段和get方法。为了获取childs,我只使用$categories\u childs[]=$repo->getChilds()。但结果仍然是一样的:“错误:对非对象调用成员函数getChilds()。”我不明白,方法findoneBytle()如何返回对象以外的内容。谢谢。如果没有搜索结果,它可以是
null
。这里有有效的搜索结果,可以作为字符串数组返回。在实体中,我还找到了名为_toString()的方法,它只返回类别的标题。这个方法不能影响整个实体的工作方式吗?
/**
 * @ORM\OneToMany(targetEntity="AbstractTreeNode", mappedBy="parent", fetch="EXTRA_LAZY")
 * @ORM\OrderBy({"lft" = "ASC"})
 */
protected $childs;