Ми}{@лbI4

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

Nested Set Behavior и attachBehavior

18.03.2014 yii, nested set, active record

Как-то наткнулся на это 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.