Yii2在init上设置新的活动记录关系

时间:2016-09-22 14:27:24

标签: php activerecord yii2

我有一对一的关系,表格Thing中有ThingExtra的额外字段。

我正在尝试初始化新的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中非常适合我们

1 个答案:

答案 0 :(得分:3)

您不能指定这样的关系,您可以尝试这样做:

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

详细了解{{3}}