小编Tho*_*ist的帖子

cascade = {"remove"} VS orphanRemoval = true VS ondelete ="CASCADE

我尝试收集有关以下方式的一些信息,以便在删除父实体时自动删除子实体.似乎最常见的方法是使用这三个注释:cascade = {"remove"} OR orphanRemoval = true OR ondelete ="CASCADE".

对第三个问题感到有点困惑:ondelete ="CASCADE",正如关于这个的官方文档中的解释非常稀缺)如果有人能够证实我从我的研究中收集和了解的以下信息,我会很高兴.网和经验......

它能做什么

cascade = {"remove"}
==>当拥有方实体为时,删除反面的实体.即使你与其他拥有的实体有许多不同之处.
- 应该用于集合(所以在OneToMany或ManyToMany关系中)
- 在ORM中实现

orphanRemoval = true
==>当拥有方实体为AND时,将删除反方的实体,并且它不再连接到任何其他拥有方实体.(参考 doctrine official_doc - ORM中的实现
- 可以与OneToOne,OnetoMany或ManyToMany一起使用

onDelete ="CASCADE"
==>这会将删除级联添加到数据库中的外键列
- 这个策略有点难以实现,但可以非常强大和快速.(参见 doctrine official_doc ......但还没有阅读更多解释)
- ORM必须做的工作少(与之前的两种做法相比),因此应该有更好的表现.

其他信息
- 所有这三种方式都在双向关系实体实现(右???)
- 使用cascade = {"remove"}完全绕过任何外键onDelete = CASCADE.(参见doctrine_official_doc)

关于如何在代码中使用它的示例

  • orphanRemoval和cascade = {"remove"}在反转的实体类中定义.
  • ondelete ="CASCADE"在所有者实体中定义
  • 你也可以写@ORM\JoinColumn(onDelete ="CASCADE")并让doctrine处理列名

级联= { "去除"}

/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", …
Run Code Online (Sandbox Code Playgroud)

entity doctrine cascade symfony

89
推荐指数
1
解决办法
3万
查看次数

标签 统计

cascade ×1

doctrine ×1

entity ×1

symfony ×1