如何为cakephp 2.0树生成左右值?

时间:2011-12-13 20:58:21

标签: cakephp tree cakephp-2.0

我已经读过,如果您的模型$actsAs = array('Tree'),您只需为种子数据设置parent_id,并且调用$this->Model->recover()即可生成正确的lft {1}}和rght值,但是当我这样做时,Cake似乎每次都会生成随机值。值从非常大(以千计)变为负值。我检查了循环引用,但没有找到。这可能有什么问题?

SQL:

create table menus (
   id        int auto_increment not null,
   parent_id int                null    ,
   lft       int                null    ,
   rght      int                null    ,
   title     varchar(1024)      not null,
   path      varchar(1024)      not null,
   constraint pk_menus primary key (id)
)   ENGINE=InnoDB DEFAULT CHARSET=latin1;

This is the seeded data:          After one Model->recover()
+----+-----------+------+------+  +----+-----------+------+------+
| id | parent_id | lft  | rght |  | id | parent_id | lft  | rght |
+----+-----------+------+------+  +----+-----------+------+------+
|  1 |      NULL | NULL | NULL |  |  1 |      NULL |  595 |  619 |
|  7 |         1 | NULL | NULL |  |  7 |         1 |  619 |  567 |
|  6 |         1 | NULL | NULL |  |  6 |         1 |  627 |  595 |
|  5 |         1 | NULL | NULL |  |  5 |         1 |  600 |  621 |
|  4 |         1 | NULL | NULL |  |  4 |         1 |  603 |  621 |
|  3 |         1 | NULL | NULL |  |  3 |         1 |  619 |  529 |
|  2 |         1 | NULL | NULL |  |  2 |         1 |  595 |  529 |
|  8 |         2 | NULL | NULL |  |  8 |         2 |  627 |  628 |
| 13 |         3 | NULL | NULL |  | 13 |         3 |  595 |  567 |
| 12 |         3 | NULL | NULL |  | 12 |         3 |  627 |  621 |
| 11 |         3 | NULL | NULL |  | 11 |         3 |  595 |  631 |
| 10 |         3 | NULL | NULL |  | 10 |         3 |  604 |  529 |
|  9 |         3 | NULL | NULL |  |  9 |         3 |  595 |  567 |
| 14 |         5 | NULL | NULL |  | 14 |         5 |  628 |  629 |
| 15 |         5 | NULL | NULL |  | 15 |         5 |  567 |  529 |
| 16 |         5 | NULL | NULL |  | 16 |         5 |  619 |  600 |
| 17 |         5 | NULL | NULL |  | 17 |         5 |  627 |  605 |
| 21 |         6 | NULL | NULL |  | 21 |         6 |  567 |  619 |
| 20 |         6 | NULL | NULL |  | 20 |         6 |  595 |  567 |
| 19 |         6 | NULL | NULL |  | 19 |         6 |  619 |  600 |
| 18 |         6 | NULL | NULL |  | 18 |         6 |  567 |  529 |
| 22 |        10 | NULL | NULL |  | 22 |        10 |  567 |  619 |
| 23 |        11 | NULL | NULL |  | 23 |        11 |   64 |  621 |
| 24 |        12 | NULL | NULL |  | 24 |        12 |  627 |  621 |
| 25 |        13 | NULL | NULL |  | 25 |        13 |  605 |  595 |
| 32 |        16 | NULL | NULL |  | 32 |        16 |  628 |  627 |
| 31 |        16 | NULL | NULL |  | 31 |        16 |  567 |  619 |
| 30 |        16 | NULL | NULL |  | 30 |        16 |   64 |  621 |
| 29 |        16 | NULL | NULL |  | 29 |        16 |  567 |  619 |
| 28 |        16 | NULL | NULL |  | 28 |        16 |  595 |  567 |
| 27 |        16 | NULL | NULL |  | 27 |        16 |  627 |  621 |
| 26 |        16 | NULL | NULL |  | 26 |        16 |  605 |  595 |
| 33 |        17 | NULL | NULL |  | 33 |        17 |  567 |  619 |
| 37 |        19 | NULL | NULL |  | 37 |        19 |   52 |  619 |
| 36 |        19 | NULL | NULL |  | 36 |        19 |   52 |  619 |
| 35 |        19 | NULL | NULL |  | 35 |        19 |  595 |  619 |
| 34 |        19 | NULL | NULL |  | 34 |        19 |   63 |  621 |
| 38 |        20 | NULL | NULL |  | 38 |        20 |   63 |  621 |
| 39 |        20 | NULL | NULL |  | 39 |        20 |   63 |  621 |
| 40 |        21 | NULL | NULL |  | 40 |        21 |  605 |  595 |
+----+-----------+------+------+  +----+-----------+------+------+

1 个答案:

答案 0 :(得分:0)

我发现,如果我将顶级项目的lftrght值分别设置为12recover()现在可以生成其余值正确的价值观。我发现这是一个错误,但不是一个可怕的错误。