14

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

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

基本上创建一个基于$object. 那是对的吗?

4

2 回答 2

26

$em->merge()用于获取已脱离实体管理器上下文的实体并“重新附加它”。

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

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

于 2013-04-05T15:50:38.760 回答
8

我知道这是一个老问题,但我认为值得一提的是它$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 之类的序列化格式存储实体是一个好主意:而是存储实体标识符或原始数据。

于 2019-05-17T12:37:26.690 回答