Как пометить Doctrine Entity Manager как «ленивый» в Symfony 4.2 - PullRequest
0 голосов
/ 19 декабря 2018

После поиска решения о том, как сбросить Doctrine Entity Manager после исключения из дублирующегося ключа, я нашел эту ветку: Менеджер прав закрыт

В одном из ответов упоминаетсяresetManager() метод, который представляется правильным в соответствии с документацией: $em = $this->getDoctrine()->resetManager();

К сожалению, при вызове resetManager() я получаю следующее исключение:

Сброс не-лазерная служба менеджера не поддерживается.Установите службу "doctrine.orm.default_entity_manager" как ленивую и вместо этого в файле composer.json укажите "symfony / proxy-manager-bridge".

Я установил пакет, но не могунайдите способ пометить менеджер по умолчанию как ленивый.Я пытался в моем services.yaml:

doctrine.orm.default_entity_manager:
    lazy: true

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

Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

Как пишет Cerad в комментарии, больше ничего не нужно делать, кроме установки "symfony / proxy-manager-bridge".Все остальное произойдет с магией Symfony.

Имейте в виду, что вы больше не можете использовать существующие репозитории сущностей с новым менеджером.Так что, если вы ранее внедрили / автоматически подключили свои репозитории, вам придется переназначить их самостоятельно с новыми от нового менеджера.

То же самое относится и к объектам вашей сущности .Например, если у вас все еще есть объект $ parent, создайте новый объект $ child и назначьте $ child для $ parent в отношении, сохранение и сброс не удастся, поскольку новый менеджер найдет отдельные объекты.

Я пытался заставить его работать с существующими объектами с помощью метода merge менеджера, но в результате возникли другие ошибки, поэтому я просто снова запрашиваю их через нового менеджера: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...