Yii ActiveRecord关系保存不连接模型
我对Yii的activerecord关系行为扩展有问题 我有一个主模型:Yii ActiveRecord关系保存不连接模型,yii,Yii,我对Yii的activerecord关系行为扩展有问题 我有一个主模型:User和一个子模型:UserPerson(一种配置文件) 这两个模型之间的关系已设置,模型行为使用yiiext,但我仍然无法连接它们 在此上下文中,$此是一个模型,它扩展了用户模型,称为注册模型 $person = new \UserPerson(); $person->full_name = $this->name; $person->birthday = $this->birthday; $pe
User
和一个子模型:UserPerson
(一种配置文件)
这两个模型之间的关系已设置,模型行为使用yiiext,但我仍然无法连接它们
在此上下文中,$此
是一个模型,它扩展了用户
模型,称为注册模型
$person = new \UserPerson();
$person->full_name = $this->name;
$person->birthday = $this->birthday;
$person->gender = $this->gender;
$this->person = $person;
$this->person->save();
这样,我应该能够运行:$this->save()
但我得到了这个错误:
无法保存具有新的相关记录的记录
我尝试了很多变化,但只有丑陋的、没有关系的版本奏效了(
有人对这个问题有什么建议吗?答案如下:
“无法保存具有新的相关记录的记录!”
您已将一条记录分配给一个尚未保存的关系(它)
尚未在数据库中)。因为ActiveRecord关系行为
需要其主键将其保存到关系表中,这将不会
工作。在保存记录之前,必须对所有新记录调用->save()
相关记录
因此,必须保存相关模型,添加相关元素,然后保存模型
$person = new \UserPerson();
$person->full_name = $this->name;
$person->birthday = $this->birthday;
$person->gender = $this->gender;
$person->save();
//now $person has a primary key
$this->person = $person;
$this->person->save();
这就是它的工作原理。Yii不支持自动保存相关记录。您必须手动保存它们。但这就是为什么我使用,以获得这样的工作,并在模型之间建立真正的关系。哦,抱歉,错过了您提到的扩展。在这种情况下,
$person
必须有效且可保存。我获得了一个外键当我尝试在没有用户id的情况下保存$person
时,培训失败($this
)因此,无论如何,我必须给$person
用户id?这不是activerecord关系行为应该关心的问题吗?不,在保存模型时,id由sql数据库提供,但id字段必须具有自动递增属性!抱歉,也许我无法解释我自己。我有一个用户和一个UserPerson
类,UserPerson
属于一个带有外键的用户。(UserPerson.User\u id
)顺便说一句:我对每个id
字段使用PHP生成的GUID,而不是自动递增的值。内容是用户需要UserPerson
id来保存关系(这是逻辑,因为这是建立关系的id)因此,您需要为您的UserPerson
模型分配一个id。通常,在保存模型时,该id由mysql分配,然后通过activerecord关系行为,您将能够保存该关系。但是由于您使用PHP GUID,我想您需要手动将该id分配给UserPerson
模型。我有用户'person'=>数组中的离子集(self::HAS_ONE,'UserPerson','User_id'),
反之亦然。那么你认为问题在于id的类型吗?这会很奇怪:)
$person = new \UserPerson();
$person->full_name = $this->name;
$person->birthday = $this->birthday;
$person->gender = $this->gender;
$person->save();
//now $person has a primary key
$this->person = $person;
$this->person->save();