Как пометить Doctrine Entity Manager как "ленивый" в Symfony 4.2

После поиска решения о том, как сбросить 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

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

Спасибо!

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

Cerad 20.12.2018 14:55

Большое тебе спасибо! Я пробовал снова, и вы правы. После установки я на самом деле не пробовал, работает ли он, так как думал, что мне нужно самому установить его ленивым («Установить службу" doctrine.orm.default_entity_manager "как ленивую и требовать [...]")

Arne 20.12.2018 19:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
8
2
3 524
1

Ответы 1

Как написал Cerad в комментарии, кроме установки «symfony / proxy-manager-bridge» ничего делать не требуется. Остальное произойдет с помощью магии Symfony.

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

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

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

Другие вопросы по теме