После поиска решения о том, как сбросить Doctrine Entity Manager после исключения повторяющегося ключа, я нашел этот поток: Менеджер прав закрыт
В одном из ответов упоминается метод resetManager(), который, согласно документации, кажется правильным:
$em = $this->getDoctrine()->resetManager();
К сожалению, при звонке в resetManager() я получаю следующее исключение:
Resetting a non-lazy manager service is not supported. Set the "doctrine.orm.default_entity_manager" service as lazy and require "symfony/proxy-manager-bridge" in your composer.json file instead.
Я установил пакет, но не могу найти способ пометить диспетчер по умолчанию как ленивый. Я пробовал на своем services.yaml:
doctrine.orm.default_entity_manager:
lazy: true
Но это привело к дальнейшим ошибкам. Как определить диспетчер сущностей по умолчанию как «ленивый» без необходимости полностью повторно указывать диспетчер? документация для ленивых сервисов тоже не помог.
Спасибо!
Большое тебе спасибо! Я пробовал снова, и вы правы. После установки я на самом деле не пробовал, работает ли он, так как думал, что мне нужно самому установить его ленивым («Установить службу" doctrine.orm.default_entity_manager "как ленивую и требовать [...]")






Как написал Cerad в комментарии, кроме установки «symfony / proxy-manager-bridge» ничего делать не требуется. Остальное произойдет с помощью магии Symfony.
Имейте в виду, что вы больше не может использовать существующие репозитории сущностей с новым менеджером. Так что, если вы ранее вводили / автоматически подключали свои репозитории, вам придется переназначить их самостоятельно на новые от нового менеджера.
Файл то же самое касается ваших объектов сущности. Если, например, у вас все еще есть объект $ parent entity, создайте новый объект $ child и назначьте $ child родительскому объекту $ в отношении, сохранение и очистка завершатся ошибкой, поскольку новый менеджер найдет отсоединенные объекты.
Я пытался заставить его работать с существующими объектами с помощью метода слить менеджера, но в итоге возникли другие ошибки, поэтому я просто снова запрашиваю их через новый менеджер :(
При новой установке S4.2 я подтвердил, что $ this-> getDoctrine () -> resetManager (); генерирует неленивое сообщение об ошибке. Затем я сделал "композитору требуется symfony / proxy-manager-bridge", и все заработало. Никаких изменений в services.yaml. «Отладка bin / console: container doctrine.orm.default_entity_manager» подтвердила, что диспетчер сущностей ленив. Так что откатите все изменения, которые вы могли внести в файл служб, удалите кеш на всякий случай и попробуйте еще раз.