父母离开,父母权利在openerp

use*_*199 3 openerp

什么是父母离开和父母权利?

Openerp中如何运作?

谢谢

use*_*199 7

正如Raphael Collet在他关于OpenERP Server的回答中解释的那样:

parent_left和parent_right是与parent_id字段相关的特殊字段.这些字段的目的是使层次结构中的查询有效执行:使用parent_left和parent_right,您可以检索节点的所有后代而无需进行递归查询.

考虑层次结构中的两个节点A和B. 例如,A和B可以是合作伙伴类别.它们的整数字段parent_left和parent_right是这样的:

    B is a descendant of A in the hierarchy (defined by parent_id)
Run Code Online (Sandbox Code Playgroud)

当且仅当

    A.parent_left < B.parent_left and
    A.parent_left < B.parent_right and 
    B.parent_left < A.parent_right and
    B.parent_right < A.parent_right
Run Code Online (Sandbox Code Playgroud)

因此,假设您有六个合作伙​​伴类别,如下所示.您可以通过遍历树来分配parent_left和parent_right.结果显示在每个节点旁边的括号中.请注意,那里的值是最佳的; 实际上,你可以在数字上留下空白.

  • 客户(1,10)
    • 消费者(2,3)
    • 合作伙伴(4,9)
      • 基本合作伙伴(5,6)
      • 金牌合作伙伴(7,8)
  • 供应商(11,12)

您可以使用单个SQL查询检索Customers的所有子类别.请注意,值1和10是Customers的parent_left和parent_right; 它们可以作为查询本身的一部分进行检索.

    SELECT id FROM partner_category
    WHERE parent_left > 1 AND parent_left < 10
Run Code Online (Sandbox Code Playgroud)

最后一点是可以在不遍历整个层次结构的情况下更新parent_left和parent_right.删除节点不需要任何更改.对于添加节点,您可以使用两个UPDATE查询调整parent_left和parent_right:一个用于在新节点的祖先的parent_left和parent_right之间"建立一些空间",另一个用于移动新节点的后续兄弟节点的parent_left和parent_right.他们的后代.因此可以有效地维护parent_left和parent_right.

  • 你需要更明确一点,而不仅仅是感谢你在答案中发布了你复制的所有内容的人.我编写了答案来说明你应该如何引用和引用从其他来源提取的材料,以便明确信用到期的地方.这些材料属于CC Attribution许可,因此您必须非常清楚地表达归属. (2认同)