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

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

【问题讨论】:

    标签: symfony doctrine cascade cascading-deletes


    【解决方案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 中写到它“与多对多关联一起工作”这就是为什么我想知道究竟是什么意思“私人拥有”
    猜你喜欢
    • 2015-02-12
    • 2011-05-18
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多