gpt4 book ai didi

odoo - openerp中的父左和父右

转载 作者:行者123 更新时间:2023-12-02 17:29:11 25 4
gpt4 key购买 nike

什么是父左和父右?

它在Openerp中如何工作?

谢谢

最佳答案

正如 Raphael Collet 在 his answer about OpenERP Server 中所解释的那样:

parent_left and parent_right are special fields that are related to the parent_id field. The purpose of those fields is to make queries within the hierarchy execute efficiently: with parent_left and parent_right, you can retrieve all the descendants of a node without making recursive queries.

Consider two nodes A and B in the hierarchy. A and B can be partner categories, for instance. Their integer fields parent_left and parent_right are such that:

    B is a descendant of A in the hierarchy (defined by parent_id)

if and only if

    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

So, imagine that you have six partner categories like below. You can assign parent_left and parent_right by traversing the tree. The result is show in parentheses next to each node. Note that the values there are optimal; in practice, you can leave gaps in the numbers.

  • Customers (1, 10)
    • Consumers (2, 3)
    • Partners (4, 9)
      • Basic Partners (5, 6)
      • Gold Partners (7, 8)
  • Suppliers (11, 12)

You can retrieve all the subcategories of Customers with a single SQL query. Note that the values 1 and 10 are the parent_left and parent_right of Customers; they can be retrieved as part of the query itself.

    SELECT id FROM partner_category
WHERE parent_left > 1 AND parent_left < 10

The last remark is that parent_left and parent_right can be updated without traversing the whole hierarchy. Removing a node does not require any change. For adding a node, you can adapt the parent_left and parent_right with two UPDATE queries: one to "make some space" between the parent_left and parent_right of the new node's ancestors, and one to shift the parent_left and parent_right of the new node's following siblings and their descendants. So parent_left and parent_right can be maintained efficiently.

关于odoo - openerp中的父左和父右,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11861436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com