在我的设置中,我有一个简单的OneToMany关系,没有级联或孤立删除。
class Position {
/**
* @var \Vorgaenge\Basis\DBBundle\Entity\Vorgang
*
* @ORM\ManyToOne(targetEntity="\Vorgaenge\Basis\DBBundle\Entity\Vorgang", inversedBy="Positionen")
* @ORM\JoinColumn(name="VID", referencedColumnName="VID")
*/
protected $Vorgang;
}
class Vorgang {
/**
* @var \Vorgaenge\Basis\DBBundle\Entity\Position
*
* @ORM\OneToMany(targetEntity="\Vorgaenge\Basis\DBBundle\Entity\Position", mappedBy="Vorgang")
* @ORM\OrderBy({"PID" = "ASC"})
*/
protected $Positionen;
}
我在我的单元测试中所做的就是创建相关的实体......
$entity = new \Vorgaenge\Basis\DBBundle\Entity\Vorgang();
$pos = new \Vorgaenge\Basis\DBBundle\Entity\Position();
$pos->Vorgang = $entity;
$pos2 = new \Vorgaenge\Basis\DBBundle\Entity\Position();
$pos2->Vorgang = $entity;
$em->persist($entity);
$em->persist($pos);
$em->persist($pos2);
$em->flush($entity);
....并在所有实体保存关系后删除其中一个关系。
$pos->Vorgang = NULL;
$em->flush();
但不知何故,Doctrine会删除整个实体$ pos,而不是仅通过将VID设置为0来删除关系。
我检查了Doctrine的UnitOfWork doRemove和scheduleForDelete方法,但似乎没有涉及。
任何人都可以帮助我理解为什么删除位置实体以及需要采取哪些措施来防止这种情况发生?
答案 0 :(得分:0)
尝试保留您想要保留的对象:
$pos->Vorgang = NULL;
$em->persist($pos2);
$em->flush();
答案 1 :(得分:0)
问题解决了。在脚本不足之后显示DB结果的视图。它现在按预期工作。这个职位就在那里。