2015-06-25 92 views
0

有一個模型:Yii的ActiveRecord的模型保存由鏈

class Model extends ActiveRecord 
{ 
    public static function model($className=__CLASS__) { 
     return parent::model($className); 
    } 

    public function toSave(Array $data) 
    { 
     $this->setAttributes($data); 
     $this->save(); // returns true 
     return $this; 
    } 
} 

和運行

$model = Model::model()->toSave($data); 

,當IM傾銷$模式存在從$數據設置好的所有數據,但不存在的PrimaryKey( ID)。

但是,如果我跑

$model = new Model; 
$model->toSave($data); 

按預期工作。

問題在哪裏?

回答

0

你正在做多次保存,通過迭代,並且每次都通過新的一套$data$model這裏是單個記錄的對象。因此,每次做新模型時,您都在創建新的新對象,分配數據並保存。後來你做的是正確的做法。

0

您使用無效的一審

$model = Model::model()->toSave($data); 

在這種情況下,使用被調用toSave()方法靜態

首先,除非你改變你的宣言

public static function toSave(Array $data) { ... } 

除了使用是非法的,靜態調用時,爲$ a的值,這是無效的。

因此,有效的使用您的是第二個版本:

$model = new Model; 
$model->toSave($data); 

參考文獻: http://php.net/manual/en/language.oop5.static.php