2014-11-04 44 views
0

我正在創建在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; 
       } 
      } 
    } 
} 

我想全部更新將是適當的功能在這裏,但我需要它來更新每個數據庫條目

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

你可以這樣做:

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.

+0

$ parent有$ parent-> left,$ parent-> right。您正在使用$ this-> left並且CActiveReocord中的$ this-> right將被插入,但這些值尚未知。 – Cirvis 2014-11-04 19:50:10

+0

我認爲這是一種關係。 – 2014-11-04 19:51:48

+0

以及我需要增加所有的左和右兩個數據庫條目左和右大於左和右的權利和權利。 – Cirvis 2014-11-04 19:52:26

相關問題