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也会刷新。可以肯定的是,在删除关系之前,所有图元都存在于各自的表中。