Ответ 1

$em->merge() используется для принятия сущности, которая была выведена из контекста диспетчера объектов и "повторно подключена".

  • Если сущность никогда не управлялась, слияние эквивалентно сохранению.
  • Если объект был отсоединен или сериализован (возможно, помещен в кеш), то слияние более или менее просматривает идентификатор объекта в хранилище данных, а затем начинает отслеживать любые изменения в сущности из этой точки.

Каскадирование слияния расширяет это поведение для связанных объектов того, с которым вы объединяетесь. Это означает, что изменения каскадируются для ассоциаций, а не только для объединения объекта.

Ответ 2

Я знаю, что это старый вопрос, но я думаю, что стоит упомянуть, что $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: вместо этого сохраните идентификаторы сущности или необработанные данные.