2014-10-03 192 views
0

我有一個具有oneToMany關係的實體。相關實體通過第一個實體的id +另一個字段具有身份。我試圖在第一個實體上設置cascade:[「persist」],但是當我試圖堅持它時,它告訴我相關的實體不能被持久化,我首先需要刷新第一個實體。但是,如果我只是刪除級聯並刷新第一個實體,它會發出異常,說它不會持久,因爲相關的實體沒有持久化,我應該設置爲級聯。主義堅持以前實體爲關鍵實體的實體

如何解決這個問題?唯一想到的解決方案是:

$relatedEntities = $entity1->getRelatedEntities(); 
$entity1->setRelatedEntities(new ArrayCollection()); 
$em->persist($entity1); 
$em->flush($entity1); 

$entity1->setRelatedEntities($relatedEntities); 
$em->flush(); 

是否有其他方法可以做到這一點?

+0

聽起來像關係的方向問題 - http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference /unitofwork-associations.html – prodigitalson 2014-10-03 14:56:50

回答

0

由於錯誤提示您必須先沖洗第一個實體。然後你刷新相關的實體。一些僞代碼:

$entity_one = new Something(); 

//Now set object values 

$em->persist($entity_one); 
$em->flush(); 

$entity_two = new SomethingElse(); 

//Now set object values (set the related/relation to the first entity) 

$em->persist($entity_two); 
$em->flush() 

我不能完全確定你需要到第一實體設置爲第二實體,一旦你已經刷新它。但你可以通過嘗試找到很容易;)