Yii ActiveRecord关系保存不连接模型

Yii ActiveRecord关系保存不连接模型,yii,Yii,我对Yii的activerecord关系行为扩展有问题 我有一个主模型:User和一个子模型:UserPerson(一种配置文件) 这两个模型之间的关系已设置,模型行为使用yiiext,但我仍然无法连接它们 在此上下文中,$此是一个模型,它扩展了用户模型,称为注册模型 $person = new \UserPerson(); $person->full_name = $this->name; $person->birthday = $this->birthday; $pe

我对Yii的activerecord关系行为扩展有问题

我有一个主模型:
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();