2014-10-03 149 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() 

我不能完全确定你需要到第一实体设置为第二实体,一旦你已经刷新它。但你可以通过尝试找到很容易;)