Блог хеллоуворлдщика

Nested Set Behavior и attachBehavior


Как-то наткнулся на это https://github.com/yiiext/nested-set-behavior/issues/32 . Увидел, что человек уже 4 месяца ждёт ответа и решил разобраться.

Оказалось, что, если вы прикрепляете бехивёр через attachBehavior в контроллере,

$model->attachBehavior(
    'nestedSetBehavior',
    array(
        'class' => 'application.behaviors.NestedSetBehavior',
        'leftAttribute' => 'lft',
        'rightAttribute' => 'rgt',
        'levelAttribute' => 'level',
        'hasManyRoots' => true,
    )
);

То, бехивёр нужно прикреплять ко всем экземпляром моделей с которыми вы работаете, т.к. при прикреплении бехивёр прописывает свои свойства внутри экземпляра модели. Например, на гитхабе некий ptheofan решил, скорее всего, вставить новую запись как дочернию, т.е. родительская запись у него уже существовала. И он получил ошибку, т.к. для вставки как дочерний элемент нужно выполнить

$model->appendTo($model->findByPk($id));

а как известно, если кто внимательно изучил код, должен знать, что перед тем как вставить происходят ряд проверок. И одна из них как раз связана с свойством $_deleted получаемым через метод getIsDeletedRecord(). Поэтому товарищ ptheofan и получил Exception.

share via vkontakte share via facebook share via mailru share via odnoklassniki share via twitter

Комментарии [0]

Нет комментариев.