Как мне сгенерировать значения lft и rght для дерева cakephp 2.0? - PullRequest
1 голос
/ 14 декабря 2011

Я читал, что если у вас есть модель $actsAs = array('Tree'), вы можете просто установить parent_id для ваших начальных данных, и вызов $this->Model->recover() должен сгенерировать правильные lft и 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 голосов
/ 18 декабря 2011

Я обнаружил, что если я установлю значения lft и rght элемента верхнего уровня на 1 и 2 соответственно, recover() теперь генерирует остальные значения должным образом. Я считаю, что это ошибка, но не ужасная.

...