嵌套集和插入记录的简单方法

时间:2014-11-04 19:15:43

标签: yii

我正在创建在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

我想这样做不会进行很多函数调用。我该怎么做?

1 个答案:

答案 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。