学说: 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 删除 另一个。
假设您的 User
与 Comment
具有 一对多 关系。如果您使用的是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(代码