Symfony Doctrine2在删除多个同一关系时删除实体

Symfony Doctrine2在删除多个同一关系时删除实体,symfony,doctrine-orm,Symfony,Doctrine Orm,在我的设置中,我有一个简单的一对一关系,没有级联或孤立删除 class Position { /** * @var \Vorgaenge\Basis\DBBundle\Entity\Vorgang * * @ORM\ManyToOne(targetEntity="\Vorgaenge\Basis\DBBundle\Entity\Vorgang", inversedBy="Positionen") * @ORM\JoinColumn(name="VID", referencedColum

在我的设置中,我有一个简单的一对一关系,没有级联或孤立删除

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;
}
我在unittest中所做的就是创建相关的实体

$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();
但不知何故,条令删除了整个实体$pos,而不是仅通过将VID设置为0来删除关系

我检查了Doctrine的UnitOfWork doRemove和scheduleForDelete方法,但它们似乎都不涉及


有人能帮我理解为什么要删除位置实体,以及需要采取什么措施来防止这种情况发生吗?

尝试将要保留的对象保持如下状态:

$pos->Vorgang = NULL;
$em->persist($pos2);
$em->flush();

问题解决了。脚本后显示DB结果的视图不充分。现在它的工作原理与预期一致。位置就在那里。

这似乎更像是
@OneToOne
关系。在任何一个
@OneToMany
/
@ManyToOne
中,relationshop的一侧是一个
集合
实例,这似乎就是您的情况。问题不在于@onetomone仅仅因为她从拥有方设置了关系。而是OneToMany。1沃冈有很多职位。Positionen是一个集合。我没有明确地设置关系的这一方,因为条令只同步拥有方(这是位置,因为ist有VID列)。我知道专家们怎么说,但您只在db中保留了
实体
类。因此,如果在
remove
实体之后检查实体,它将显示所有空引用,因为
$pos
$pos2
从未持久化所有实体都已插入。这是好的方面:我只需要刷新$entity,通过可达性,$pos和$pos2也会刷新。可以肯定的是,在删除关系之前,所有图元都存在于各自的表中。