【问题标题】:Doctrine 2 nested set - retrieve full tree in single queryDoctrine 2 嵌套集 - 在单个查询中检索完整树
【发布时间】:2016-07-02 22:51:15
【问题描述】:

我正在使用stof/StofDoctrineExtensionsBundleAtlantic18/DoctrineExtensions 的捆绑包装器)来实现嵌套集(树)实体。该实体已配置并正在工作,但我无法弄清楚如何在单个查询中检索所有根注释及其所有子项(完整树)。我目前有完整的集合返回,但是它延迟加载所有子项,这意味着执行了大量的查询。

感谢您的帮助。

【问题讨论】:

    标签: doctrine-orm nested-sets doctrine-extensions stofdoctrineextensions


    【解决方案1】:

    您可以只使用childrenHierarchy() 方法来检索整个树:

    $tree = $repo->childrenHierarchy();  
    

    【讨论】:

      【解决方案2】:

      找到了解决办法。

      1. 检索节点对象的完整列表:

        $repo = $this->getDoctrine()->getManager()->getRepository('NestedEntity');
        $nodes = $repo->getChildren();
        
      2. 用你的节点构建树。

        $tree = $repo->getRepoUtils()->buildTreeArray($nodes);
        
      3. 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 = [];
        
             ...
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多