Yii 嵌套集和插入记录的简单方法
我正在创建在数据库中插入新集合的表单。并将其插入到给定的父id下 我现在在Yii 嵌套集和插入记录的简单方法,yii,Yii,我正在创建在数据库中插入新集合的表单。并将其插入到给定的父id下 我现在在beforeSave()中,希望更新其他数据库条目 protected function beforeSave() { if (parent::beforeSave()){ if($this->parent_id >= 0){ $parent = self::model()->findByPk($this->parent_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;
}
}
}
}
我认为updateall在这里是合适的函数,但我需要它来更新每个db条目
update `nodes` where left > $parent->left to left = left + 2
update `nodes` where right > $parent->right to right = right + 2
以下是CActiveRecord updateAll()引用:
我不想做太多的函数调用。我怎么做 您可以执行以下操作:
self::model()->updateAll(array(
'left'=>$this->left+2,
),'left>:pleft',array(":pleft"=>$parent->left));
及
如果$this->right
和$this->left
是独立的,您可以使用updateCounter()
方法,如下所示:
self::model()->updateCounters(
array('right'=>2), //increments +2
'right>:pright',array(":pright"=>$parent->right)
);
在上面的代码中,更新所有行(
WHERE right>parent.right
)并将所有权限增加2。$parent具有$parent->left、$parent->right。您正在使用来自CactiveRecord的$this->left和$this->right,这些值将被插入。我假设这些值是未知的。我还需要将所有的left和rights作为一个关系增加2到那些left和right大于left和right的db条目。不清楚,'left>:pleft',数组(':pleft'=>$parent->left)
表示WHERE left>parent.left
,您不想这样吗?是的,如果WHERE left>parent.left
为真,则向左递增2。
self::model()->updateCounters(
array('right'=>2), //increments +2
'right>:pright',array(":pright"=>$parent->right)
);