学说: cascade="remove" vs orphanRemoval=true

Posted

技术标签:

【中文标题】学说: cascade="remove" vs orphanRemoval=true【英文标题】:Doctrine: cascade="remove" vs orphanRemoval=true 【发布时间】:2014-10-20 07:42:24 【问题描述】:

以上两个选项有什么区别?什么时候最好选择每个选项?

【问题讨论】:

【参考方案1】:

它们的基本区别是:

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

假设您的 UserComment 具有 一对多 关系。如果您使用的是cascade="remove",您可以从一个User 中删除对Comment 的引用,然后附加该Comment 到另一个 User。当您持久保存它们时,它们将被正确保存。但是如果您使用orphanRemoval=true,即使您将从一个User 中删除给定的Comment,然后附加到另一个User,因为引用已被删除,所以在persist期间将删除此评论。

【讨论】:

@a2ad2d “私有”是什么意思?我知道 orphanRemoval=true 可以在多对多关系中使用 @Aleqxs 你能举个例子吗? @a2ad2d 多对多关系中的类别实体和文章实体。请参阅有关此主题的问题here 以及我在级联中删除的一些测试here @Aleqxs 抱歉,但似乎在 ManyToMany 的情况下,orphanRemoval 没有意义 @a2ad2d 但在offical doctrine documentation 中写到它“与多对多关联一起工作”这就是为什么我想知道究竟是什么意思“私人拥有”

以上是关于学说: cascade="remove" vs orphanRemoval=true的主要内容,如果未能解决你的问题,请参考以下文章

级联=“删除” VS orphanRemoval=true VS ondelete="CASCADE

如何让 Symfony 2 与学说 ORM 只保留一次相关实体

解决hibernate删除时的异常 deleted object would be re-saved by cascade (remove deleted object from associa(代码

学说中 fetch="EAGER" 和 fetch="LAZY" 有啥区别

是否支持 DELETE CASCADE?

使用 sqlalchemy 将 onupdate="cascade" 添加到 postgres 中的现有列