Создание дерева вручную в CakePHP - PullRequest
3 голосов
/ 02 декабря 2009

В настоящее время я работаю над созданием приложения в CakePHP. Существует довольно обширный существующий набор данных, который концептуально представляет собой дерево, но ранее он не хранился как единое целое. Под этим я подразумеваю, что в данных не определены реальные отношения.

У меня проблема в том, чтобы заставить его работать правильно с поведением дерева CakePHP. Поскольку я должен установить все значения для существующих данных - в отличие от настройки Cake структуры при вставке элементов - мне нужно понять, как работают значения lft / rght.

Итак, я думаю, что вопрос:

Как работают данные структуры, в частности значения lft / rght? Как мне сделать так, чтобы данные выходили рационально, не вставляя их по одному? Это двухуровневое дерево с разделами и подразделами.

Спасибо за помощь

1 Ответ

17 голосов
/ 02 декабря 2009

Логика дерева MPTT довольно проста и хорошо объяснена в Управление иерархическими данными в MySQL . Таким образом, каждая запись имеет левое и правое значение. Каждая запись, значения которой слева / справа находятся в пределах диапазона других записей слева и справа, является потомком этого (последнего) элемента. Например. ЖК-узел (5/6) находится в пределах досягаемости его родительского узла, телевизоров (2-9).

alt text
(источник: mysql.com )

Чтобы построить значения lft / rght для "нового" дерева, просто установите все parent_ids правильно и запустите на нем $this->Model->recover(). Cake рассчитает значения lft / rght для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...