Doctrine2应自动合并关联的实体

时间:2012-05-24 13:12:41

标签: php symfony doctrine-orm

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

至于为什么学说不能自动完成,我不确定。我怀疑在某些情况下,实体的自动合并可能是危险的,或者至少是不合需要的。