"Real" 使用 Doctrine/MySQL 删除孤儿



我有两个实体通过学说/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关系中,您需要从删除所有相关类别中删除文章,但是您不想仅仅因为此刻是空的,因为它是空的。

我猜这就是为什么教义没有正式提及ManyToManyorphanRemoval选项的原因,因为它不清楚并且要完全支持两个变体,而当前实现还不够。

希望这是可以理解的。就您而言,尽管您可能需要自己清理未使用的标签。

相关内容

  • 没有找到相关文章

最新更新