我正在构建一个用户管理页面,用于创建或编辑用户。
用户由两个实体组成,用户和个人资料,这些实体具有一对一的关系(我会合并,但由于历史原因不能)
/ * User.php - 实体类
/**
* @var Profile
* @Assert\Type(type="App\Entity\Profile")
* @Assert\Valid()
* @ORM\OneToOne(targetEntity="Profile", mappedBy="user", cascade={"persist"})
*/
private $profile;
/ * Profile.php - 个人资料实体类
/**
* @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,email),但未明确包含关系字段(user_id)。
另一种形式是用户表单,其中包含基本用户字段(用户名,密码),还包括个人资料表单。
$builder->add('profile', ProfileForm::class);
当我使用此表单进行编辑时,一切正常,并且对两个对象的更改仍然存在。但是,当我尝试使用该表单创建新用户时,它失败了,说我错过了 user_id 。
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null
看起来这应该有效,但我错过了一些东西。
答案 0 :(得分:0)
感谢@Cerad的回答。我没有在我的User实体setProfile类中设置链接。
/**
* 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;
}