Doctrine2 orphanRemoval ManyToMany仅在没有连接其他记录的情况下

时间:2013-09-02 16:07:01

标签: symfony doctrine-orm doctrine symfony-2.3

我的目的是仅在实体艺术家没有其他记录的情况下删除实体艺术家的记录。

我以这种方式尝试使用orphanRemoval:

Soundtrack.php

/**
 * @Assert\NotBlank(message = "soundtrack.artists.blank")
 * @ORM\ManyToMany(targetEntity="Artist", inversedBy="soundtrack", cascade={"persist", "remove"}, orphanRemoval=true)
 * @ORM\JoinTable(name="soundtrack_artist")
 * @ORM\OrderBy({"name" = "ASC"})
 **/
private $artists;

Artist.php

/**
 * @ORM\ManyToMany(targetEntity="Soundtrack", mappedBy="artists")
 */
private $soundtrack;

但是当我删除实体记录音轨时,即使它被链接到其他记录音轨也会清除实体艺术家的记录(我认为这是你应该从orphanRemoval那里得到的)。

有没有办法在没有连接其他记录的情况下删除该记录“孤儿”?

我也尝试过这样:

**Soundtrack.php**

/**
 * @Assert\NotBlank(message = "soundtrack.artists.blank")
 * @ORM\ManyToMany(targetEntity="Artist", inversedBy="soundtrack", cascade={"persist"}, orphanRemoval=true)
 * @ORM\JoinTable(name="soundtrack_artist")
 * @ORM\OrderBy({"name" = "ASC"})
 **/
private $artists;

但不删除记录实体艺术家..

1 个答案:

答案 0 :(得分:1)

orphanRemoval选项明确地认为,拥有的side对象是唯一引用其子对象的实例。为了使它工作,你应该从父母分离孩子(未设置引用)以删除子项。对于多对多关联,您应该在两侧分离实体(拥有和反向)

请参阅Docs

  

当使用orphanRemoval = true选项时,Doctrine会做出假设   这些实体是私有的,不会被其他实体重复使用   实体。如果你忽略了这个假设,你的实体就会得到   即使您已将孤立实体分配给Doctrine,也会将其删除   另一个。