ChatGPT解决这个技术问题 Extra ChatGPT

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

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


m
marco-fiset

它们之间的基本区别是:

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

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


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