gpt4 book ai didi

php - Doctrine2 应该自动合并相关实体

转载 作者:搜寻专家 更新时间:2023-10-31 22:12:49 24 4
gpt4 key购买 nike

我正在构建一个订单流程,其中一个 Order 对象是通过许多步骤构建的。在每个步骤之后,我将部分完成的 Order 对象放入 session 中,并在最后一步中将其保存到数据库中。

在这些步骤中,我将其他(已经存在的)关联对象加载到我的 Order 对象中(例如 DiscountCoupon)。问题是,当我将 Order 保存到 session 并在下一步加载它时,所有关联的实体都将被分离。因此,当我想将其保存到数据库时,EntityManager 抛出异常,要求在关系上设置 cascade=persist

当然,我不需要持久化那些对象(它们已经在数据库中)。显而易见的解决方案可能是将那些关联对象更改为合并对象(使用 EntityManager#merge 方法),但是,我有一个相当复杂的对象结构,具有多个级别的嵌入式实体,所以执行上述过程会比较不方便。

Doctrine 不能自动为我完成这个任务吗?因此,它不会“提示”我的分离实体,而是可以自动合并它们。

最佳答案

据我所知,如果你试图让它完全自动化,你就会创造一些严肃的魔法。

您最好的选择可能是实现一个带有如下签名的函数:mergeOrderEntities($Order, $EntityManager) 它知道如何讨论 Order 结构并在所有分离的关联实体上调用 EntityManager::merge()。

至于为什么 doctrine 不会自动执行此操作,我不确定。我怀疑在某些用例中,实体的自动合并可能是危险的,或者至少是不受欢迎的。

关于php - Doctrine2 应该自动合并相关实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com