NestedSetBehavior root_id

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
coder
Сообщения: 139
Зарегистрирован: 2010.04.09, 23:42
Откуда: Москва

NestedSetBehavior root_id

Сообщение coder »

Я недоумеваю, для режима "много деревьев" рекомендуется использовать:

Код: Выделить всё

Category::model()->findAll(array('condition'=>'root_id=?','order'=>'lft'),array($root_id)); 
При этом в таблице из "schema_with_many_roots.sql" нет поля "root_id", каким образом это может работать? Спасибо.
Аватара пользователя
coder
Сообщения: 139
Зарегистрирован: 2010.04.09, 23:42
Откуда: Москва

Re: NestedSetBehavior root_id

Сообщение coder »

Океей, спасибо, очень странно, что поле называется root, а в примерах его называют root_id. Судя по всему, забыли где-то переименовать.

Вот ещё странность. Поведение отключает метод save(), переопределяя beforeSave:

Код: Выделить всё

    public function beforeSave($event)
    {
        if($this->_ignoreEvent)
            return true;
        else
            throw new CDbException(Yii::t('yiiext','You should not use CActiveRecord::save() method when NestedSetBehavior attached.'));
    }
 
Но не предлагает никакого альтернативного способа обновить модель. Например, у меня поменялся заголовок, но узел некуда не переместился, я не могу просто обновить модель :)
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: NestedSetBehavior root_id

Сообщение lancecoder »

disabled behavior, если работаете как с обычной моделью или нечто
class model extends CModel{
}

class modelWNestedSet extends model{
$behaviors=array(...);
}
upd: dettach скорее всего а не disable
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: NestedSetBehavior root_id

Сообщение lancecoder »

saveNode()
Аватара пользователя
coder
Сообщения: 139
Зарегистрирован: 2010.04.09, 23:42
Откуда: Москва

Re: NestedSetBehavior root_id

Сообщение coder »

lancecoder писал(а):saveNode()
saveNode создает корневой узел в режиме много деревьев, а в режиме одного дерева вобще выбрасывает исключение. Вариант с отключением поведения решает проблему, но явный костыль :)

Более того, даже при перемещении узлов, другие данные модели не обновляются, как бы вы их не задали. Пришлось отключить эту проверку на save() и обновлять данные самому после того, как поведение выполнит свои манипуляции.

Очень полезное, но при этом очень странное расширение :) Каждый раз, как я беру его в руки, у меня возникают проблемы, но в итоге оно решает все мои задачи с хранением вложенных множеств.
saska
Сообщения: 4
Зарегистрирован: 2012.10.23, 11:34

Re: NestedSetBehavior root_id

Сообщение saska »

coder писал(а):

Код: Выделить всё

Category::model()->findAll(array('condition'=>'root_id=?','order'=>'lft'),array($root_id));
Люди добрые, помогите! Что должно быть в $root_id, чтобы вернуть модель со всеми категориями (включен режим много деревьев)?
saska
Сообщения: 4
Зарегистрирован: 2012.10.23, 11:34

Re: NestedSetBehavior root_id

Сообщение saska »

Ну и там такая же строчка написана, только в ней root_id исправлено на root, а что должно быть в $root не пойму, пробовал всякие туда и значения и массивы со значениями вводить, возвращается пустой объект.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: NestedSetBehavior root_id

Сообщение lancecoder »

вам внимательность нужна
Category::model()->findAll(array('condition'=>'root=?','order'=>'lft'),array($root));
saska
Сообщения: 4
Зарегистрирован: 2012.10.23, 11:34

Re: NestedSetBehavior root_id

Сообщение saska »

lancecoder писал(а):вам внимательность нужна
Category::model()->findAll(array('condition'=>'root=?','order'=>'lft'),array($root));
Про внимательность согласен, на эту строчку я уже пару дней медитирую, но все равно не пойму что присвоить $root чтобы получить дерево, тыкните пальцем точнее, пожалуйста?
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: NestedSetBehavior root_id

Сообщение lancecoder »

дерево которое ты хочешь вывести, что у него в столбце 'root=?'
saska
Сообщения: 4
Зарегистрирован: 2012.10.23, 11:34

Re: NestedSetBehavior root_id

Сообщение saska »

lancecoder писал(а):дерево которое ты хочешь вывести, что у него в столбце 'root=?'
значение: 25
$root = '25'; заранее скажу, что не работает
Ответить