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

Yii 嵌套集和插入记录的简单方法,yii,Yii,我正在创建在数据库中插入新集合的表单。并将其插入到给定的父id下 我现在在beforeSave()中,希望更新其他数据库条目 protected function beforeSave() { if (parent::beforeSave()){ if($this->parent_id >= 0){ $parent = self::model()->findByPk($this->parent_id);

我正在创建在数据库中插入新集合的表单。并将其插入到给定的父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)
);