Symfony 2中的OneTONE
我尝试保存用户和配置文件的相关实体。我使用cascade={“persist”}选项。数据正确保存在数据库中,配置文件表中的用户id字段除外,该字段等于null。当我打开关系时,用户表中的profile_id字段会正确保存。我的错在哪里?这是我的亲戚: 用户实体:Symfony 2中的OneTONE,symfony,annotations,doctrine,one-to-one,Symfony,Annotations,Doctrine,One To One,我尝试保存用户和配置文件的相关实体。我使用cascade={“persist”}选项。数据正确保存在数据库中,配置文件表中的用户id字段除外,该字段等于null。当我打开关系时,用户表中的profile_id字段会正确保存。我的错在哪里?这是我的亲戚: 用户实体: /** * @ORM\OneToOne(targetEntity="Profile", mappedBy="user", ,cascade={"persist"}) */ 配置文件实体: /** * @ORM\OneToOne
/**
* @ORM\OneToOne(targetEntity="Profile", mappedBy="user", ,cascade={"persist"})
*/
配置文件实体:
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="profile", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
获取者和设置者:
用户:
简介:
`/**
* @param User $user
*/
public function setUser(User $user)
{
$this->user = $user;
}
/**
* @return User
*/
public function getUser()
{
return $this->user;
}`
也许您只在user:
$user->addProfile($profile)中添加配置文件
而您没有使用viceversa:$profile->addUser($user)代码>这基本上是@skler的答案,但我无法在评论中解释自己
尝试在User.php的setProfile()中执行此操作:
我使用的是FOSUserBundle,因此无法手动处理数据。cascade
选项可以为我实现这一点。或者我不明白什么。我是新手。我猜他的意思是在你的User
ssetProfile()
@FyodorX:可能是setProfile,没有getter和setter的问题。@Dobrichok:FosUserBundle没有profile实体,你自己管理,在某个地方你向用户添加了profile。User
表中为什么有profile\u id
?根据您的注释,您应该在profile
表中有用户id
,没有其他内容。FyodorX,谢谢您的帮助)但是现在我不明白为什么它会起作用,即使在我转换关系时没有正确的设置器?
`/**
* @param User $user
*/
public function setUser(User $user)
{
$this->user = $user;
}
/**
* @return User
*/
public function getUser()
{
return $this->user;
}`
public function setProfile(Profile $profile)
{
$this->profile = $profile;
$this->profile->setUser($this);
}