2013-04-05 116 views

回答

15

$em->merge()用於取出已從實體管理器的上下文中取出並重新附加它的實體。

  • 如果實體從未被管理,合併等同於持久化。
  • 如果實體被分離或序列化(可能放入緩存),則合併或多或少地查找數據存儲中實體的ID,然後開始跟蹤從該點開始的對實體的任何更改。

級聯合並將此行爲擴展到您正在合併的實體中。這意味着更改將級聯到關聯,而不僅僅是要合併的實體。

+0

非常感謝您的支持!我也有類似的問題,實體經理關閉後,我不得不重置經理。發生了什麼事情是,應更新的實體,插入聲明,並出現外鍵約束錯誤。使用$ em-> merge()爲我解決了它,因爲它將實體標記爲再次管理。 – tomazahlin 2014-12-01 14:56:17

+0

我知道這個答案是舊的,但僅供參考,merge()將在Doctrine3中被移除https://github.com/doctrine/doctrine2/blob/master/UPGRADE.md – Patito 2018-02-09 12:05:03