【问题标题】:Doctrine 2 nested set - retrieve full tree in single queryDoctrine 2 嵌套集 - 在单个查询中检索完整树
【发布时间】:2016-07-02 22:51:15
【问题描述】:
【问题讨论】:
标签:
doctrine-orm
nested-sets
doctrine-extensions
stofdoctrineextensions
【解决方案1】:
您可以只使用childrenHierarchy() 方法来检索整个树:
$tree = $repo->childrenHierarchy();
【解决方案2】:
找到了解决办法。
-
检索节点对象的完整列表:
$repo = $this->getDoctrine()->getManager()->getRepository('NestedEntity');
$nodes = $repo->getChildren();
-
用你的节点构建树。
$tree = $repo->getRepoUtils()->buildTreeArray($nodes);
-
buildTreeArray 方法接受节点数组的数组,因此您必须在您的实体中实现 ArrayAccess 接口。它还将所有子节点放在节点数组的__children 键中。
/**
* @Gedmo\Tree(type="nested")
* @ORM\Table(name="nested_entity")
* @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
*/
class NestedEntity implements \ArrayAccess
{
public function offsetExists($offset)
{
return property_exists($this, $offset);
}
public function &offsetGet($offset)
{
return $this->$offset;
}
public function offsetSet($offset, $value)
{
$this->$offset = $value;
}
public function offsetUnset($offset)
{
$this->$offset = null;
}
protected $__children = [];
...