在我的设置中,我有一个简单的 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 方法,但似乎都没有涉及。
谁能帮我理解为什么删除了 Position 实体以及需要做些什么来防止这种情况发生?