我该如何级联具有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字段。如果要自动生成标识符,则需要相应地调整元数据映射。
该学说文档将其称为简单的派生身份,但没有说明如何级联它。
答案 0 :(得分:3)
事实证明,答案实际上很简单。
首先需要交换User
和mappedBy
。
第二,在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