Как использовать множественный менеджер сущностей в сервисах Symfony 4

Я установил два менеджера сущностей в doctrine.yml Мне нужно ввести репозиторий в сервис, но проблема в том, что в репозитории всегда используется менеджер сущностей по умолчанию. Как передать в репозиторий конкретного менеджера сущностей. В symfony 4 мы можем рассматривать репозиторий как службу, используя ServiceEntityRepository.

Итак, у вас есть одна и та же сущность, отображаемая в нескольких менеджерах? Это действительно проблема с использованием ServiceEntityRepository. Проверьте конструктор, и вы увидите, что используется первый менеджер, отображающий сущность. Вы можете написать свой собственный конструктор, если репозиторий знает, какой менеджер использовать. Или вы можете подключите свои репозитории старомодным способом, используя factory.

Cerad 18.07.2018 15:06

Не одно и то же, у меня разные сущности для разных менеджеров. определение старомодного способа с использованием фабрики работает. Благодарность

Raj 19.07.2018 08:40

Возможно, вам захочется дважды проверить свое отображение. Если данная сущность отображается только в одном диспетчере сущностей, тогда готовый ServiceEntityRepository будет работать. Я подозреваю, что у вас может быть несколько сопоставлений, не осознавая этого, что может вызвать неожиданное поведение в будущем.

Cerad 19.07.2018 13:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
3
1 720
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо ленивой / автоматической загрузки вам нужно будет настроить каждую из них как именованную службу и явно настроить их загрузку в вашем файле services.yaml.

Ответ принят как подходящий

Вы можете попробовать внедрить Doctrine\Common\Persistence\ManagerRegistry в свою конструкцию. А потом используйте $managerRegistry->getManager('your_connection_name');

Например:

//use Doctrine\Common\Persistence\ManagerRegistry;
private $connection;
function __construct(ManagerRegistry $em)
{
    $this->connection = $em->getManager('your_connection_name');
}

Ваше обновление для Symfony 4 не работает в общем сервисе - $this->getDoctrine() не импортируется волшебным образом только потому, что вы вводите диспетчер сущностей. В предоставленном вами документе показан Controller, который расширяет AbstractController, который использует ControllerTrait, который имеет вспомогательный метод getDoctrine(), который выполняет $this->container->get('doctrine')

Brian F 08.03.2019 23:32

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