2017-05-16 92 views
-2

DefaultFormHandler.php例外 '更新...':誠信約束衝突: '關鍵 '主要'

protected function onSuccess($object) 
    {   
      $artistmember= new ArtistMember(); 
      $artistmember->setMemberId($object->getManager()->getId()); 
      $artistmember->setArtistId($object->getId()); 
      $this->em->merge($artistmember); 
      $this->em->flush(); 
      return $object; 
    } 

ArtistMember

/** 
* @ORM\Entity 
* @ORM\Table(name="artist_member") 
*/ 
class ArtistMember 
{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(name="artist_id", type="integer") 
    */ 
    private $artist_id; 
    /** 
    * @ORM\Column(name="member_id", type="integer") 
    */ 
    private $member_id; 


    /** 
    * @param mixed $artist_id 
    */ 
    public function setArtistId($artist_id) 
    { 
     $this->artist_id = $artist_id; 
    } 
    /** 
    * @param mixed $member_id 
    */ 
    public function setMemberId($member_id) 
    { 
     $this->member_id = $member_id; 
    } 



} 
1062重複條目'

entity artist get manager()

/** 
    * Set manager 
    * 
    * @param Member $manager 
    */ 
    public function setManager($manager) 
    { 
     $this->manager = $manager; 

     if (! $this->members->contains($manager)) { 
      $this->members->add($manager); 
     } 
    } 

    /** 
    * Get manager 
    * 
    * @return \MainBundle\Entity\Member 
    */ 
    public function getManager() 
    { 
     return $this->manager; 
    } 

我有2個表:Artist表和member

artist table我有idmanager_id和在member表我有member_idartist_id

如果member表只包含one artist_idmember_id,更新查詢可以正常工作。 例如:artist-id = 1,manager_id = 10。 但我得到上述錯誤,如果我嘗試更新任何經理的ID在這種情況下:

eg: artist_id=1 
    member_id=10 
    artist_id=1 
    member_id =20 

如果我嘗試更新member id20301030我得到的錯誤。 該解決方案解決了這個問題:但是還有更好的方法嗎?還有可能檢查artist_member和member_id是否已經存在於artist_member表中。

+0

解決方案如果我這樣做:protected function onSuccess($ object) { $ sql =「UPDATE artist_member SET member_id =」。$ object-> getManager() - > getId()。「WHERE member_id =(從artist中選擇manager_id,其中id =「。$ object-> getId()。」)和artist_id =「。$ object-> getId(); $ stmt = $ this-> em-> getConnection() - > prepare($ sql); $ stmt-> execute(); $ this-> em-> persist($ object); $ this-> em-> flush(); return $ object; } – Programmer

回答

0

的錯誤是自我解釋:

在執行時出現異常「更新...」:完整性約束違規:1062重複條目'關鍵‘PRIMARY’

的問題是,當您嘗試更新經理ID 20 to 3010 to 30,您試圖更新的新值已存在於列中。