我正在使用stof/StofDoctrineExtensionsBundle(Bundle wrapper for Atlantic18/DoctrineExtensions)來實現嵌套集(樹)實體。該實體已配置並正在運行,但我無法弄清楚如何在單個查詢中檢索其所有子級(全樹)的所有根音。我目前有完整的集合返回,但它懶惰加載所有的孩子,這意味着執行大量的查詢。Doctrine 2嵌套集 - 在單個查詢中檢索完整樹
感謝您的任何幫助。
我正在使用stof/StofDoctrineExtensionsBundle(Bundle wrapper for Atlantic18/DoctrineExtensions)來實現嵌套集(樹)實體。該實體已配置並正在運行,但我無法弄清楚如何在單個查詢中檢索其所有子級(全樹)的所有根音。我目前有完整的集合返回,但它懶惰加載所有的孩子,這意味着執行大量的查詢。Doctrine 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 = [];
...
您可以只使用childrenHierarchy()
方法整棵樹檢索:
$tree = $repo->childrenHierarchy();