Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2在init上设置新的活动记录关系_Php_Activerecord_Yii2 - Fatal编程技术网

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

Php Yii2在init上设置新的活动记录关系,php,activerecord,yii2,Php,Activerecord,Yii2,我有一对一的关系,在表ThingExtra中有Thing的额外字段 我正在尝试初始化一个新的ThingExtra以在创建一个新的对象时使用,然后在保存对象时同时保存它们: class Thing extends ActiveRecord { public function init(){ if($this->isNewRecord){ $this->extra = new ThingExtra(); } }

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

我正在尝试初始化一个新的
ThingExtra
以在创建一个新的
对象时使用,然后在保存
对象时同时保存它们:

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 = new Thing;
我得到以下例外情况:

Exception: Setting read-only property: Thing::extra
这周围还有什么吗?还是我的设计完全有缺陷


在Yii1.1中,这种方法对我们非常有效。您不能分配这样的关系,您可以尝试以下方法:

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

阅读有关

的详细信息如果无法分配这样的关系,可以尝试以下方法:

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

阅读更多关于

Thank的信息可能会将
null
作为第二个参数,因为可能已经创建了一个新的参数。看起来我不正确,需要
new ThingExtra()
!Thank可以将
null
作为第二个参数,因为可能已经创建了一个新参数。看起来我不正确,需要
newthingextra()