我正在从学说1.2转换到2.x并遇到一个奇怪的问题。
我有一个实体 CompositionRule ,它有一个属性$ buildingBlock,指向 BuildingBlock 实体。
我设置了这个属性,使其指向现有的BuildingBlock,我从数据库中获取它。
当我持久保存主对象(CompositionRule)时,entitymanager尝试创建一个新的BuildingBlock项并将其插入数据库,而不是仅仅接受它已存在并忽略它。
当你执行$ entity-> save()时,我不会在教义1.2中看到我在这里失踪的东西。所有底层对象都得到了正确处理。
以下是我的映射/代码的一些部分:
CompositionRule:
<many-to-one field="buildingBlock" target-entity="BuildingBlock">
<cascade><cascade-all /></cascade>
</many-to-one>
..
public function setBuildingBlock($buildingBlock) {
$buildingBlock->addCompositionRule($this);
$this->buildingBlock = $buildingBlock;
}
BuildingBlock
<one-to-many field="compositionRules" target-entity="CompositionRule" mapped-by="buildingBlock">
<cascade>
<cascade-all />
</cascade>
</one-to-many>
public function addCompositionRule($rule) {
$this->compositionRules->add($rule);
}
答案 0 :(得分:11)
我明白这是一个老问题,但我最近遇到了同样的问题,所以它可能会有所帮助。
它发生在&#34;分离&#34;您的实体的状态。你应该使用doctrine :: merge()函数来解决这个问题。
$rule = new CompositionRule;
$block = $entityManager->merge($block); //it's important to use result of function, not the same element
$entityManager->persist($role);
$entityManager->flush();