在学说中级联简单的派生身份

时间:2018-08-02 21:31:51

标签: symfony doctrine-orm orm

我该如何级联具有OneToOne关系的联接模型,其中只有User表具有自动递增策略,联接的Profile模型必须具有与{ {1}} ID。

我的模型如下:

User

Company\Model\User

class User { /** * @Id * @GeneratedValue * @Column(type="integer") * @var int */ private $id; /** * @OneToOne(targetEntity="Profile", inversedBy="user", cascade={"persist"}) * @var Profile */ private $profile;

Company\Model\Profile

在持久保存class Profile { /** * @Id * @OneToOne(targetEntity="User", mappedBy="profile") * @JoinColumn(name="id") * @var User */ private $user; 模型的实例时,将导致输出以下错误:

  

类型为Company \ Model \ Profile的实体缺少为“配置文件”字段分配的ID。该实体的标识符生成策略要求在调用EntityManager#persist()之前填充ID字段。如果要自动生成标识符,则需要相应地调整元数据映射。

该学说文档将其称为简单的派生身份,但没有说明如何级联它。

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/composite-primary-keys.html#use-case-2-simple-derived-identity

1 个答案:

答案 0 :(得分:3)

事实证明,答案实际上很简单。

首先需要交换UsermappedBy

第二,在inversedBy上设置Profile时,必须依次在个人资料上设置用户。

User

Company\Model\User

class User { /** * @Id * @GeneratedValue * @Column(type="integer") * @var int */ private $id; /** * @OneToOne(targetEntity="Profile", mappedBy="user", cascade={"persist"}) * @var Profile */ private $profile; public function setProfile(Profile $profile): void { $this->profile = $profile; $this->profile->setUser($this); }

Company\Model\Profile