2014-12-05 68 views
1

我有2名相關的實體是這樣的:關聯實體沒有合併正確

class Solicitation { 
    <some fields> 
    /** 
    * @var \User 
    * 
    * @ORM\ManyToOne(targetEntity="User", fetch="EAGER", inversedBy="solicitation") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_user", referencedColumnName="id_user", nullable=false) 
    * }) 
    * @OrderBy({"nome" = "ASC"}) 
    */ 
    private $user; 
    <more fields> 
} 

我不想級聯操作。問題是,當我嘗試堅持徵集,這樣之前合併現有用戶:

$em = $this->getDoctrine()->getManager(); 
if (!(\Doctrine\ORM\UnitOfWork::STATE_MANAGED === $em->getUnitOfWork()->getEntityState($solicitation->getUser()))) { 
    $em->merge($solicitation->getUser()); 
} 
$em->persist($solicitation); 

...它不會改變「被管理」用戶的UnitOfWork狀態。我還是「脫離」,我收到並保存錯誤。

回答

2

我花了一整天的時間來發現

$em->merge($solicitation->getUser()) 

不改變原有的實體,它回報一個menaged實體。所以正確的是:

$solicitation->setUser($em->merge($solicitation->getUser())); 

然後堅持徵求。提出這個問題,以防其他人需要這個。