我正在构建一个订单流程,其中通过许多步骤构建Order
对象。在每个步骤之后,我将部分完成的Order
对象放入session
,并在最后一步中将其保存到数据库中。
在这些步骤中,我将其他(已存在的)关联对象加载到我的Order
对象中(例如DiscountCoupon
)。问题是,当我将Order
保存到session
然后在下一步中加载它时,所有关联的实体都将被分离。因此,当我想将其保存到数据库时,EntityManager
会抛出异常,要求在关系上设置cascade=persist
。
当然,我不需要持久保存这些对象(它们已经存在于数据库中)。显而易见的解决方案可能是将那些关联对象更改为合并对象(使用EntityManager#merge
方法),但是,我有一个相当复杂的对象结构,具有多级嵌入实体,因此执行上述过程会相当不方便。 / p>
Doctrine不能自动为我执行此任务吗?因此,不是“抱怨”我的分离实体,它可以自动合并它们。
答案 0 :(得分:0)
据我所知,如果你试图让它完全自动化,你就会创造出一些严肃的魔力。
您最好的选择可能是实现一个具有以下签名的函数:mergeOrderEntities($ Order,$ EntityManager),它知道如何讨论Order结构并在所有分离的关联实体上调用EntityManager :: merge()。
至于为什么学说不能自动完成,我不确定。我怀疑在某些情况下,实体的自动合并可能是危险的,或者至少是不合需要的。