2016-09-22 50 views
0

我有一對一的關係,其中表ThingExtra中有Thing的額外字段。Yii2在初始化時設置了新的活動記錄關係

我想初始化一個新的ThingExtra創建一個新的Thing時的工作,然後將其保存時都Thing保存:

class Thing extends ActiveRecord 
{ 
    public function init(){ 
     if($this->isNewRecord){ 
      $this->extra = new ThingExtra(); 
     } 
    } 

    public function getExtra(){ 
     return $this->hasOne(ThingExtra::className(),['thing_id' => 'id']); 
    } 

    public function afterSave($insert, $changedAttributes) 
    { 
     parent::afterSave($insert, $changedAttributes); 
     $this->extra->thing_id = $this->id; 
     $this->extra->save(); 
    } 
} 

現在,當我嘗試創建一個Thing

$thing = new Thing; 

我得到以下異常:

Exception: Setting read-only property: Thing::extra 

無論如何圍繞此?或者我的設計完全有缺陷?

這種方式工作得適合我們在Yii1.1

回答

2

您不能分配這樣的關係,你可以試試這個:

public function init(){ 
    if($this->isNewRecord){ 
     $this->populateRelation('extra', new ThingExtra()); 
    } 
} 

瞭解更多關於ActiveRecord::populateRelation()

+0

感謝大概可以作爲第二個參數,使用'null'離開,因爲無論如何都可能創建一個新的參數。 – Arth

+0

看起來我不正確,並且需要'new ThingExtra()'! – Arth