Symfony:如何配置嵌入式表单以创建新的子对象?

Symfony: How to configure embedded form to create new child object?

我正在构建一个用户管理页面,我可以在其中创建或编辑用户。

用户由两个实体组成,userprofile,它们具有一对一的关系(我会合并,但可以因为历史原因)。

/* User.php - 实体 Class

/**
 * @var Profile
 * @Assert\Type(type="App\Entity\Profile")
 * @Assert\Valid()
 * @ORM\OneToOne(targetEntity="Profile", mappedBy="user", cascade={"persist"})
 */
private $profile;

/* Profile.php - 配置文件实体 Class

/**
 * @var \App\Entity\User
 *
 * @ORM\OneToOne(targetEntity="App\Entity\User", inversedBy="profile")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 * })
 */
private $user;

我建了两个表格。

一种形式是 个人资料 形式,它包含所有必要的个人资料字段(first_name、last_name、电子邮件),尽管没有明确包含关系字段 (user_id).

另一种形式是用户形式,其中包含基本用户字段(用户名、密码),还包括个人资料形式。

    $builder->add('profile', ProfileForm::class);

当我使用此表单进行编辑时,一切正常,并且对两个对象的更改仍然存在。但是当我尝试使用表单创建新用户时,它失败了,说我缺少 user_id.

    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null

这似乎应该可行,但我遗漏了一些东西。

感谢@Cerad 的回答。我没有在我的用户实体 setProfile class 中设置 link。

/**
 * Set profile
 *
 * @param \App\Entity\Profile $profile
 *
 * @return SfGuardUser
 */
public function setProfile(\App\Entity\Profile $profile = null)
{
    $this->profile = $profile;
    $this->profile->setUser($this);  // Adding this line fixed my issue

    return $this;
}