2014-09-08 3 views
1

관련 엔터티 사용자 및 프로필을 저장하려고합니다. 나는 cascade = { "persist"} 옵션을 사용합니다. 프로필 테이블의 user_id 필드를 제외한 데이터베이스에 데이터가 제대로 저장되며 해당 값은 null입니다. 관계를 설정하면 사용자 테이블의 profile_id 필드가 올바르게 저장됩니다. 내 실수는 어디 갔지?Symfony 2의 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 Profile $profile 
*/ 
public function setProfile(Profile $profile) 
{ 
    $this->profile = $profile; 
} 

/** 
* @return Profile 
*/ 
public function getProfile() 
{ 
    return $this->profile; 
}` 

프로필 여기 내 관계입니다 :

`/** 
* @param User $user 
*/ 
public function setUser(User $user) 
{ 
    $this->user = $user; 
} 

/** 
* @return User 
*/ 
public function getUser() 
{ 
    return $this->user; 
}` 
+0

왜 당신이'user' 테이블에'profile_id'을해야합니까? 주석에 따르면'profile' 테이블 내에'user_id'가 있어야하고 다른 것은 없습니다. –

답변

0

이 본질적으로 @skler 대답하지만 의견에 자신을 설명 할 수있다.

당신의 User.phpsetProfile()에서이 일을보십시오 :

public function setProfile(Profile $profile) 
{ 
    $this->profile = $profile; 
    $this->profile->setUser($this); 
} 
+0

FyodorX, 도움을 주셔서 감사합니다)하지만 지금은 그나마이다 그 관계를 바꿀 때 제대로 작동하지 않는 이유라도 이해할 수 있습니까? –

0

은 아마 당신은 사용자 만 프로파일을 추가 : $user->addProfile($profile); 당신은 viceversa에를하지 않았다 : $profile->addUser($user);

+0

데이터를 수동으로 처리하지 않도록 FOSUserBundle을 사용하고 있습니다. '캐스케이드 (cascade) '옵션은 나를 위해 그렇게한다. 또는 나는 무언가를 이해하지 못한다. 나는 초보자이다. –

+0

사용자의'setProfile()'에서 그가 의미하는 것처럼 보입니다. – FyodorX

+0

@FyodorX : 예 아마도 setProfile, 질문에 getter 및 setter가 없습니다. – skler