Данное поведение позваляет работать с деревьями в бд по алгоритму Adjacency List.
Основное достоинство данного алгоритма простота управлением дерева и простота программной реализации.
Опции класса
parentAttribude - название атрибута модели который содержит id родительского узла (по умолчанию = "pid")
orderAttribude - название атрибута модели который содержит позицию узла (по умолчанию = "position")
Установка
Добавить в модель:
Код: Выделить всё
public function behaviors()
{
return array(
'treebehavior' => array(
'class' => 'yiiext.behaviors.model.treebehavior.ETreeBehavior',
// Настраиваем опции если необходимо
'parentAttribude' => 'parent_id',
'orderAttribude' => 'order'
)
);
}
children($criteria = null)
Получает всех детей данного узла по заданному критерию.
где $criteria - CDbCriteria
parent($criteria = null)
Получает родительский узел
где $criteria - CDbCriteria
path($criteria = null)
Получает путь от данного узла до корня дерева
где $criteria - CDbCriteria
branch($criteria = null, $depth = null, $returnAsNestedArrays = false)
Получает ветвь дерева относительно данного узла
где $criteria - CDbCriteria, $depth - глубина выборки, $returnAsNestedArrays - возвратить результат в виде вложенных массивов, а не списка
tree($criteria = null, $depth = null, $returnAsNestedArrays = false)
Получает дерево
где $criteria - CDbCriteria, $depth - глубина выборки, $returnAsNestedArrays - возвратить результат в виде вложенных массивов, а не списка
order(array $order)
Сортировка узлов
где $order - массив со значениями первичнычх ключей в порядке сортировки
FAQ
Что такое вложенный массив?
Вложенный массив это:
Код: Выделить всё
array(
0 => узел 1,
'children' => array(
0 => узел 1.1
'children' => array(
0 => узел 1.1.1
...
)
)
)
Рекомендации
При большой вложенности дерева, рекомендуется использовать кеширование данных
TODO
Оптимизировать выборку данных
Каскадное удаление
level для узлов
Посмотреть на Github: https://github.com/troublegum/treebehavior или тут http://blog-programmista.ru/post/yii_ra ... lists.html