【问题标题】:Yii ActiveRecord-Relation save not connecting modelsYii ActiveRecord-Relation 保存不连接模型
【发布时间】:2013-04-29 00:02:16
【问题描述】:

我对 Yii 的 activerecord-relation-behavior 扩展有疑问。

我有一个主模型:User 和一个子模型:UserPerson(一种配置文件)

这两个模型之间的关系设置好了,模型的行为是使用yiiext,但我仍然无法连接它们。

在这种情况下$this 是一个模型,它扩展了User 模型并称为RegistrationModel

$person = new \UserPerson();
$person->full_name = $this->name;
$person->birthday = $this->birthday;
$person->gender = $this->gender;

$this->person = $person;
$this->person->save();

这样,我应该可以跑了:$this->save() 但我得到这个错误:

您无法保存具有新相关记录的记录!

我尝试了很多变体,但只有丑陋的、无关系的版本有效。 :(

$person->user_id = $this->id;
//..
$person->save();

有人对这个问题有什么建议吗?

【问题讨论】:

  • 这就是它应该如何工作的。 Yii 不支持自动保存相关记录。您必须手动保存它们。
  • 但这就是为什么我使用activerecord-relation-behavior 来完成这项工作并在模型之间建立真正的关系。
  • 哦,对不起,错过了你提到的扩展。

标签: yii


【解决方案1】:

答案在repository of the extension

“您无法保存具有新相关记录的记录!”

您已将记录分配给尚未保存的关系(它 尚未在数据库中)。自 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();

【讨论】:

  • 在这种情况下,$person 必须有效且可保存。当我尝试在没有用户 ID 的情况下保存 $person 时,我得到一个 foreign key constraint fail。 ($this) 所以无论如何,我必须将用户 ID 提供给 $person 吗?这不是 activerecord-relation-behavior 应该关心的吗?
  • 保存模型时sql数据库没有给出id,但是id字段需要带自增属性!
  • 对不起,也许我无法解释自己。我有一个User 和一个UserPerson 类,而UserPerson 属于带有外键的User。 (UserPerson.user_id) 顺便说一句:我为每个 id 字段使用 PHP 生成的 GUID,而不是自动递增的值。
  • 内容是用户需要UserPerson id 来保存关系(这是逻辑,因为这是建立关系的id)所以你需要为你的UserPerson 模型分配一个id。通常在保存模型时 mysql 会分配 id,然后使用 activerecord-relation-behavior 您将能够保存关系。但是由于您使用 PHP GUID,我认为您需要手动将 id 分配给您的 UserPerson 模型。
  • 我在 User 'person' => array(self::HAS_ONE, 'UserPerson', 'user_id'), 中设置了关系,反之亦然。所以你认为问题出在 id 的类型上?那会很奇怪:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 2011-02-14
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多