我正在从学说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;
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
Kam*_*mil 12
我理解这是一个老问题,但我最近遇到了同样的问题,所以它可能有所帮助.
它是由于您的实体的"分离"状态而发生的.你应该使用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();
Run Code Online (Sandbox Code Playgroud)