2

在我的设置中,我有一个简单的 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 实体以及需要做些什么来防止这种情况发生?

4

2 回答 2

0

问题解决了。脚本后显示数据库结果的视图不充分。它现在按预期工作。位置就在那里。

于 2013-12-10T09:54:12.970 回答
0

尝试像这样持久化您想要保留的对象:

$pos->Vorgang = NULL;
$em->persist($pos2);
$em->flush();
于 2013-11-15T10:52:37.413 回答