Symfony2 Doctrine合并

men*_*lic 13 symfony doctrine-orm

我正在学习http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html,但我无法弄清楚级联合并的作用.我在其他地方看到过

$new_object = $em->merge($object); 
Run Code Online (Sandbox Code Playgroud)

基本上创建一个新的托管对象$object.那是对的吗?

jam*_*s_t 24

$em->merge() 用于获取已从实体管理器的上下文中取出并"重新附加"的实体.

  • 如果从未管理过实体,则merge等同于persist.
  • 如果实体被分离或序列化(也许放在缓存中),那么合并或多或少地查找数据存储中实体的id,然后从该点开始跟踪实体的任何更改.

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

  • 我知道这个答案很老,但仅供参考,merge()将在Doctrine3中删除https://github.com/doctrine/doctrine2/blob/master/UPGRADE.md (6认同)

Kir*_*iva 7

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