4

我的目的是仅在没有实体连接配乐的其他记录时删除实体艺术家中的记录。

我以这种方式尝试了 orphanRemoval :

原声带.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;

艺术家.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;

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

4

1 回答 1

1

orphanRemoval选项明确认为,拥有侧对象是唯一引用其子对象的实例。要使其正常工作,您应该将子项与父项(未设置的引用)分离以删除子项。使用多对多关联,您应该分离两侧的实体(拥有和反向)

查看文档

当使用 orphanRemoval=true 选项时,Doctrine 假设实体是私有的,不会被其他实体重用。如果您忽略此假设,即使您将孤立实体分配给另一个实体,您的实体也会被 Doctrine 删除。

于 2015-02-20T09:20:27.327 回答