2013-04-30 2 views
0

연관 삭제와 관련하여 도움을 요청하고 싶습니다. Doctrine : 자체 참조에서 엔티티 제거 (다 대다)

User 기업 :

class User 
{ 
    ... 

    /** 
    * @ORM\ManyToMany(targetEntity="User", mappedBy="following") 
    **/ 
    private $followers; 

    /** 
    * @ORM\ManyToMany(targetEntity="User", inversedBy="followers") 
    * @ORM\JoinTable(name="friends", 
    *  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="friend_user_id", referencedColumnName="id")} 
    *) 
    **/ 
    private $following; 

내가 두 가지 작업이는 :

프로필 :

// followAction 
$entityManager = $this->getDoctrine()->getEntityManager(); 

$me->addFollowing($targetUser); 
$targetUser->addFollower($me); 

$entityManager->persist($me); 
$entityManager->persist($targetUser); 

$entityManager->flush(); 

프로필을 따르 팔로우를 취소

$entityManager = $this->getDoctrine()->getEntityManager(); 

$me->removeFollowing($targetUser); 
$targetUser->removeFollower($me); 

$entityManager->persist($me); 
$entityManager->persist($targetUser); 

$entityManager->flush(); 

다음 프로세스가 적절한 방법으로 작동하고 있으며 해당 레코드 friends이 표시됩니다.

하지만 사용자를 팔로우를 해제하려고 할 때, 내가받을 예외 : PARAMS { "1"로 '(?) 친구 (USER_ID, friend_user_id) 값으로 INSERT'실행하는 동안

는 예외가 발생했습니다 : 2, "2": 10} :

SQLSTATE [23000] : 무결성 제약 조건 위반 : 키 'PRIMARY'

내가 잘못 뭐하는 거지에 대한 1062 중복 항목 '2-10'? 나는 persist으로 시도했는데 그걸 제외하고는 같은 것입니다. 어쩌면 연관 구성에서 뭔가?

답변

0

첫 번째 실수는 2 개의 지속 동작이므로 하나만 필요합니다.

// class User 

public function switchFollowingUser(User $user) 
{ 
    if ($this->following->contains($user)) 
     $this->following->removeElement($user) ; 
    else 
     $this->following->add($user) ; 
} 

을하고 싶지만 짧은 때문에 내가 좀이 방법을 선호하는 경우 컨트롤러는 두 가지 방법으로 단지

$follower->switchFollowingUser($user) ; 

추출물이 방법이 될 것이다 :이 옵션을 선택합니다.

두 번째 문제 : 당신이) (__construct에

$this->following = new ArrayCollection() ; 
$this->followers = new ArrayCollection() ; 

넣어나요?

시도해보십시오.

관련 문제