Вложенный набор Yii (Yiiext). Попытка переместить корневой узел

Я использую фантастическое расширение Yiiext "nested-set-behavior":
https://github.com/yiiext/nested-set-behavior

Мне интересно узнать, может ли кто-нибудь сообщить мне, как перемещать (вверх или вниз) корневой узел, когда я запускаю вложенный набор с несколькими корнями.

пример дерева:

  1. Телефоны (корневой узел)
    1.1 Мобильный
    1.2 Фиксированный
  2. Автомобили (корневой узел)
    2.1 Быстро
    2.2 Медленно
    2.3 Средне
  3. Плоскости (корневой узел)
    3.1 Большой
    3.2 Маленький

В тот момент, когда я вытаскиваю полное дерево и показываю его пользователю, я получаю вышеуказанный результат.

Я хотел бы иметь возможность перемещать «Автомобили» перед «Телефонами».

Есть ли способ сделать это?

Я пытался:

    $cars        = Category::model()->findByPk($cars_id);
    $phones      = $cars->prev()->find();
    $cars->moveBefore($phones);

Это дает мне ошибку в методе moveAfter класса поведения вложенного множества.

Кто-нибудь делал это раньше?

Спасибо

Дэйв


person Dave    schedule 21.10.2013    source источник


Ответы (2)


Как предполагает документ, метод prev() возвращает:

Array of Active Record objects corresponding to ....

Поэтому вы должны подходить к этому по-другому, например

$phones = Category::model()->findByPk($phones_id);
$cars = Category::model()->findByPk($cars_id);
$cars->moveBefore($phones);

Или другой подход, который подходит для вашего сценария приложения

Ваш код может быть исправлен:

$cars        = Category::model()->findByPk($cars_id);
$phones      = $cars->prev()->find();

foreach($phones as $phone){
  $cars->moveBefore($phone);
}

что не имеет смысла ;)

(пс: не проверял этот код)

person sakhunzai    schedule 21.10.2013

Как я понимаю, у вас есть 3 узла, которые являются корнями. Проблема в том, что методы moveAfter() и moveBefore() нельзя применить к основным корням. Вы пытаетесь переместить узел относительно другого узла, но они находятся в разных деревьях. Если автомобили и телефоны имеют общий корень, это будет успех.

Другими словами, вы работаете с узлами в разных деревьях, которые ничего не знают друг о друге.

person Pavel Sushkevich    schedule 21.10.2013