我有两个实体通过学说/mysql项目中的ManyToMany
关系链接在一起。
Client
实体:
class Client
{
[...]
/**
* @ORMManyToMany(targetEntity="ClientTag")
* @ORMJoinTable(name="clients_tags")
*/
protected $tags;
}
和一个ClientTag
实体:
class ClientTag
{
[...]
/**
* @ORMColumn(type="string", length=45)
*/
protected $label;
/**
* @ORMColumn(type="string", length=7)
*/
protected $color;
}
因此,我有能力将多个客户端与一个标签相关联,反之亦然。
但是,当没有更多客户引用它。
我试图在ManyToMany
注释上使用orphanRemoval
,但它没有做我想的事情。 orphan 删除应完全暗示我上面描述的内容,但是当对其父母的引用时,它会删除标签被删除,不考虑我需要的其他实体。
如果客户端删除了标签,但是此标签仍由其他两个客户使用,我不认为它" orphan ",因为它仍然具有一个或多个引用它的实体。
当然,如果我找不到任何父母,我可以通过查询并自己删除该案例来解决此案,但是我想知道教义或MySQL是否内置了这样做(这会更加优化)?
有什么想法吗?
感谢您的帮助。
在学说中不支持ManyToMany
的官方orphanRemoval
。
http://docs.doctrine-project.org/en/latest/reference/Referent/Annotations-Referent.html#annref-manytomany
在这种情况下,孤儿的去除是模棱两可的。您可以将与已删除的实体的关系(可共同条目)理解为孤儿或相关实体。从数据库的角度来看,这将是可连接条目。从ORM的角度来看,这是相关实体。
这两种方式都是正确的,具体取决于用例。例如,在 Article
< -> Category
关系中,您需要从删除所有相关类别中删除文章,但是您不想仅仅因为此刻是空的,因为它是空的。
我猜这就是为什么教义没有正式提及ManyToMany
的orphanRemoval
选项的原因,因为它不清楚并且要完全支持两个变体,而当前实现还不够。
希望这是可以理解的。就您而言,尽管您可能需要自己清理未使用的标签。