我正在创建在db中插入新集的表单。并将其插入给定的父ID。
我现在在beforeSave()
我希望更新其他数据库条目。
protected function beforeSave()
{
if (parent::beforeSave()){
if($this->parent_id >= 0){
$parent = self::model()->findByPk($this->parent_id);
if($parent){
self::model()->updateAll(); // cant figure out how to use this as I need.
}else{
return false;
}
}
}
}
我认为更新all将是适当的功能,但我需要它来更新每个数据库条目
update `nodes` where left > $parent->left to left = left + 2
update `nodes` where right > $parent->right to right = right + 2
这是CActiveRecord updateAll()参考:
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#updateAll-detail
我想这样做不会进行很多函数调用。我该怎么做?
答案 0 :(得分:1)
你可以这样做:
self::model()->updateAll(array(
'left'=>$this->left+2,
),'left>:pleft',array(":pleft"=>$parent->left));
和
self::model()->updateAll(array(
'right'=>$this->right+2
),'right>:pright',array(":pright"=>$parent->right));
如果$this->right
和$this->left
是独立的,您可以使用下面的updateCounter()
方法:
self::model()->updateCounters(
array('right'=>2), //increments +2
'right>:pright',array(":pright"=>$parent->right)
);
上面的代码,更新所有行(WHERE right > parent.right
)并将所有权利增加2。