标签: nested-sets

如何在doctrine嵌套集中获取节点的父ID

我有以下代码:

$treeObject = Doctrine_Core::getTable('Category')->getTree();
$rootColumnName = $treeObject->getAttribute('rootColumnName');

foreach ($treeObject->fetchRoots() as $root) {
  $options = array( 'root_id' => $root->$rootColumnName  );

  foreach($treeObject->fetchTree($options) as $node) {
    $parent_id = $node->getNode()->getParent()->getId();
    echo $parent_id;
  }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但getparent()调用为每个节点执行查询.是在那里检索父ID而不运行数百个额外的查询.

doctrine nested-sets

6
推荐指数
0
解决办法
1685
查看次数

索引和嵌套集

我使用嵌套集来表示我的应用程序中的层次结构,并且想知道放置索引(聚簇或其他)的最佳位置.我正在使用Microsoft SQL Server 2008.

操作:

  1. 每天大约40次,将在根目录下添加新的层次结构.
  2. 层次结构可能永远不会被删除.
  3. 白天,parentId经常访问层次结构以逐步填充组合框.
  4. 层次结构很少被移动.也许甚至不是一个月一次.
  5. 与其他表链接时,最大的访问权限是左右.到目前为止,这是对层次结构的最常见访问.

我玩弄了左右两个聚集索引(大多数时候,它会用a来查询val BETWEEN @left AND @right.但是左右聚类是正确的方法吗?

非常感谢任何比我更有SQL索引经验的人!

架构原样

_id       INT IDENTITY NOT NULL
_idParent INT IDENTITY NULL
_name     NVARCHAR(64)
_left     INT NOT NULL
_right    INT NOT NULL
Run Code Online (Sandbox Code Playgroud)

sql sql-server indexing nested-sets

6
推荐指数
1
解决办法
1120
查看次数

帮助编写嵌套集的SQL查询

我正在使用嵌套集将数据库存储在数据库中.表的字段是id,lft,rgt和name.

给定一个节点ID,我需要找到它们本身就是叶节点的所有直接子节点(不是孙子节点).

sql nested-sets

5
推荐指数
1
解决办法
8496
查看次数

PHP RecursiveIteratorIterator和嵌套集

我在一个层次结构中有一组对象.有一个顶级"根"节点,它有子节点,后面又有子节点等.我试图使用嵌套集模型将这个结构保存到数据库中,每个节点的每个"边"都编号为定义层次结构,如在MySQL管理分层数据:

替代文字
(来源:mysql.com)

我的问题是计算左右值.我通常使用RecursiveIteratorIterator迭代层次结构,但我无法计算如何计算数字而不诉诸通过引用解析索引变量的递归函数.

有任何想法吗?

它可能没用,但这是我目前拥有的(不正确的)代码:

$iterator = new RecursiveIteratorIterator(
    new Node_List(array($root)),
    RecursiveIteratorIterator::SELF_FIRST);

$i = 0;     
foreach ($iterator as $node) {
    $node->left = ++$i;
    $node->right = ++$i;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,会产生这样的结果:

Node 
    Node 
    Node 
Run Code Online (Sandbox Code Playgroud)

左右值:

Node (1, 2)
    Node (3, 4)
    Node (5, 6)
Run Code Online (Sandbox Code Playgroud)

什么时候他们应该:

Node (1, 6)
    Node (2, 3)
    Node (4, 5)
Run Code Online (Sandbox Code Playgroud)

php recursion iterator nested-sets

5
推荐指数
1
解决办法
3658
查看次数

您是否为包含子节点的多个父节点的分层数据建模扩展了嵌套集?你有什么经历?

我希望在我即将开展的项目中使用这个概念.

更多信息:在MySQL中管理分层数据.

请通过示例分享您的经历好坏.

我正在添加更多信息以使其更广泛:

我有可以拥有多个父项的子项(例如:用户可以属于city,还有一个名为UserDefinedRegion的组),这是典型的层次模型不支持的,无论是邻接列表还是嵌套集.

为清楚起见,我在这里粘贴用例:


背景:目前系统具有固定的层次结构,即State-> County-> City-> User

  1. 销售经理登录系统并创建一个新组,该组可以与城市或县处于同一级别.

  2. 销售经理登录系统并创建一个新组,该组可以位于州和县或县和市之间.

  3. 销售经理创建组后,他应该能够在他的仪表板中查看第二天​​汇总的所有必要报告.


如您所见,第二点可以通过嵌套集轻松完成,但不是第一点,它将为同一子节点引入新的父节点.

到目前为止,stackOverflow用户提出了以下解决方案:

  1. 网络数据库支持的网络节点结构.
  2. 有向无环图.

我肯定在寻找一个RDBMS解决方案.在现实生活中看起来没有多少人在层次数据模型中遇到过多个父节点.

database-design nested-sets

5
推荐指数
1
解决办法
3599
查看次数

Ruby on Rails - 令人敬畏的嵌套集插件

使用此插件时是否有一种简单的方法来显示整个嵌套集?我想要做的是显示一个无序的根节点列表,每个子节点中还有另一个无序列表,其中也包含子节点等等?

任何建议表示赞赏

谢谢.

ruby-on-rails nested-sets

5
推荐指数
1
解决办法
4602
查看次数

如何显示相关记录子集的表单,其中一些还不存在?

我有任务和用户.当用户完成任务时,我创建一个完成,其中有一个字段供用户指示他们花了多长时间.我需要一个表单,显示所有具有完成状态和time_spent属性的任务.在提交时,应更新已存在的完成,并应创建新的完成.如果可能的话,我想在Formtastic中这样做,但我会对基本的Rails 3解决方案感到满意.

class Completion < ActiveRecord::Base
  belongs_to :task
  belongs_to :user

  # attribute time_spent
end

class User < ActiveRecord::Base
  has_many :completions
  has_many :tasks, :through => :completions
end    

class Task < ActiveRecord::Base
  belongs_to :milestone
  has_many :completions
  has_many :users, :through => :completions
end
Run Code Online (Sandbox Code Playgroud)

另一个方面是我想要显示一组特定任务,例如那些属于里程碑的任务.我应该在里程碑控制器上有一个表格发布到完成控制器吗?

class Milestone < ActiveRecord::Base
  has_many :tasks
  has_many :completions, :through => :tasks
end
Run Code Online (Sandbox Code Playgroud)

更新 我现在已经找了几天,我发现了很多 死路 一条.Rails表单中的这个Multiple对象很接近,但它要求所有链接对象都已存在.

让这个问题与众不同的是,有些链接尚不存在,并且没有单一的模型可以嵌套链接.例如,使用Ryan Daigle的嵌套对象形式帖子)我已经将这个工作以一种形式进行编辑所有可能的用户完成,但我需要在一个表单中编辑可能的完成的子集.我是否需要制作一个冗余对象MilestoneCompletions即has_manyCompletions和belongs_toUser?可以使用ActiveModel has_many吗?

activerecord ruby-on-rails nested-sets nested-forms

5
推荐指数
1
解决办法
945
查看次数

rails ancestry嵌套表单

我刚刚开始使用Ancestry而不是awesome_nested_set,我想创建一个嵌套表单,以便我可以在一个表单中创建一个父帐户和许多子帐户.问题似乎是Ancestry不允许你为新的父母创建一个孩子.

在awesome_nested_set中,我可以在rails控制台中执行此操作

a = Account.new
a.children.build
Run Code Online (Sandbox Code Playgroud)

当我输入a.children时,即使我的帐户父项尚未创建,我也可以在那里看到新的孩子.这允许我显示一个包含父帐户和一些空白孩子的表单,然后在提交时我会忽略任何空白孩子并创建整个批次.

如果我尝试使用祖先做同样的事情,我会收到以下错误:

a=Account.new
a.children
Ancestry::AncestryException: No child ancestry for new record. Save record before performing tree operations.
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/ancestry-1.2.4/lib/ancestry/instance_methods.rb:62:in `child_ancestry'
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/ancestry-1.2.4/lib/ancestry/instance_methods.rb:132:in `child_conditions'
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/ancestry-1.2.4/lib/ancestry/instance_methods.rb:136:in `children'
    from (irb):8
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start'
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start'
    from /home/map7/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
Run Code Online (Sandbox Code Playgroud)

这是祖先的限制吗?我有不同的方式可以使用祖先创建嵌套表单?

tree nested-sets nested-forms ruby-on-rails-3

5
推荐指数
1
解决办法
2575
查看次数

实体框架4.2中的嵌套集模型或任何种类的层次模型

我想知道是否存在某种插件来管理实体框架4.2中的嵌套集数据库设计

http://en.wikipedia.org/wiki/Nested_set_model


我要处理分层数据,在我看来,嵌套集是更有效的处理方式。
我知道Php原则(ORM)中有某些东西,希望EF中也有类似的东西。

谢谢。

nested-sets entity-framework-4.1

5
推荐指数
0
解决办法
560
查看次数

Doctrine 2 嵌套集 - 在单个查询中检索完整树

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

谢谢你的帮助。

nested-sets doctrine-orm doctrine-extensions stofdoctrineextensions

5
推荐指数
1
解决办法
3431
查看次数