Symfony:如何配置嵌入式表单以创建新的子对象?
Symfony: How to configure embedded form to create new child object?
我正在构建一个用户管理页面,我可以在其中创建或编辑用户。
用户由两个实体组成,user 和 profile,它们具有一对一的关系(我会合并,但可以因为历史原因)。
/* 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;
}
我正在构建一个用户管理页面,我可以在其中创建或编辑用户。
用户由两个实体组成,user 和 profile,它们具有一对一的关系(我会合并,但可以因为历史原因)。
/* 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;
}