我已经读过,如果您的模型$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 |
+----+-----------+------+------+ +----+-----------+------+------+
答案 0 :(得分:0)
我发现,如果我将顶级项目的lft
和rght
值分别设置为1
和2
,recover()
现在可以生成其余值正确的价值观。我发现这是一个错误,但不是一个可怕的错误。