Doctrine多对多删除目标实体而不是仅可加入记录

时间:2015-08-20 14:47:51

标签: doctrine-orm

我有照片实体,它与标签实体具有人与人之间的关系。

/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Tag", cascade={"persist", "remove"})
 * @ORM\JoinTable(name="photos_tags",
 *      joinColumns={@ORM\JoinColumn(name="photo_id", referencedColumnName="id", onDelete="CASCADE")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id", onDelete="CASCADE")}
 *      )
 **/
protected $tags;

假设我有一个具有TagA和TagB的PhotoA。但我也有PhotoB也有TagA。当我删除PhotoB时,TagA也被删除。这是我不想要的。我定义了级联操作,因为我认为这应该只删除JoinColumn值...但是看起来TagEntity也被删除为级联操作。

我哪里错了?

1 个答案:

答案 0 :(得分:0)

/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Tag")
 * @ORM\JoinTable(name="photos_tags",
 *      joinColumns={@ORM\JoinColumn(name="photo_id", referencedColumnName="id", onDelete="CASCADE")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
 *      )
 **/
protected $tags;

此注释解决了这个问题。我没有意识到,学说自己管理这些现实并删除连接表中的记录而不需要描述。显然如果要删除和标记实体,那么应该注释级联操作。