Symfony2 Doctrine合并

时间:2013-04-05 12:11:43

标签: symfony doctrine-orm

我正在研究https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-associations.html,但我无法弄清楚级联合并的作用。我在其他地方看到了

$new_object = $em->merge($object); 

基本上基于$object创建一个新的托管对象。这是对的吗?

2 个答案:

答案 0 :(得分:22)

$em->merge()用于获取已从实体管理员的上下文中删除并重新附加实体的实体。

  • 如果从未管理过实体,则合并相当于持久化。
  • 如果实体已分离或序列化(可能放在缓存中),则合并或多或少地查找数据存储中实体的ID,然后从该点开始跟踪实体的任何更改。

级联合并会将此行为扩展到要合并的实体的关联实体。这意味着更改会级联到关联,而不仅仅是要合并的实体。

答案 1 :(得分:0)

我知道这是一个古老的问题,但我认为值得一提的是$em->merge()已过时,将很快被删除。

  

不建议使用合并操作,并将在Persistence 2.0中将其删除。   合并应该是应用程序业务领域的一部分,而不是   比ObjectManager的通用操作更重要。

还请阅读此文档v3,他们希望实体如何存储

https://www.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/entities-in-session.html#entities-in-the-session

  

最好避免以序列化格式存储实体,例如   作为$ _SESSION:而是存储实体标识符或原始数据。