3

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

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

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

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

4

1 回答 1

0

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

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

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

于 2012-05-24T15:23:30.653 回答