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




Вместо ленивой / автоматической загрузки вам нужно будет настроить каждую из них как именованную службу и явно настроить их загрузку в вашем файле 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')
Итак, у вас есть одна и та же сущность, отображаемая в нескольких менеджерах? Это действительно проблема с использованием ServiceEntityRepository. Проверьте конструктор, и вы увидите, что используется первый менеджер, отображающий сущность. Вы можете написать свой собственный конструктор, если репозиторий знает, какой менеджер использовать. Или вы можете подключите свои репозитории старомодным способом, используя factory.