Symfony 2中的OneTONE

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

我尝试保存用户和配置文件的相关实体。我使用cascade={“persist”}选项。数据正确保存在数据库中,配置文件表中的用户id字段除外,该字段等于null。当我打开关系时,用户表中的profile_id字段会正确保存。我的错在哪里?这是我的亲戚:

用户实体:

/**
 * @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
s
setProfile()
@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);
}