私のセットアップでは、カスケードや孤立した削除のない単純な 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 メソッドを確認しましたが、いずれも関与していないようです。
ポジションエンティティが削除された理由と、これを防ぐために何をする必要があるかを理解するのを手伝ってくれる人はいますか?