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);

....すべてのエンティティとリレーションが保存された後、リレーションの 1 つを削除します。

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

しかしどういうわけか、Doctrine は VID を 0 に設定して関係を削除するだけでなく、エンティティ $pos 全体を削除します。

Doctrine の UnitOfWork doRemove および scheduleForDelete メソッドを確認しましたが、いずれも関与していないようです。

ポジションエンティティが削除された理由と、これを防ぐために何をする必要があるかを理解するのを手伝ってくれる人はいますか?

4

2 に答える 2

0

保持したいオブジェクトを次のように永続化してみてください。

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