Слияние Symfony2 Doctrine
Я изучаю https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-associations.html, но не могу понять, что делает каскадное слияние. Я видел в другом месте, что
$new_object = $em->merge($object);
в основном создает новый управляемый объект на основе $object
. Это верно?
Ответы
Ответ 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: вместо этого сохраните идентификаторы сущности или необработанные данные.