В настоящее время я использую Doctrine2 в Laravel через пакет https://laraveldoctrine.org, и у меня возникла проблема с несколькими подключениями.
Мне нужно использовать несколько Doctrine Entity Mangers (EM) для нескольких соединений, чтобы заставить работать несколько баз данных.Для получения документации по умолчанию EM предлагает использовать fe.Контейнер Laravels app('em');
.Но для именованных документов EM (https://laraveldoctrine.org/docs/1.3/orm/multiple-connections) предлагает ввести Doctrine\Common\Persistence\ManagerRegistry
в хранилище, а затем использовать метод getManager()
, чтобы получить желаемый EM.
Но - Doctrine\Common\Persistence\ManagerRegistry
- это интерфейс, я понятия не имеюкак его инициализировать и чем. До сих пор я получил:
class RandomRepository extends EntityRepository
{
public function __construct(ManagerRegistry $managerRegistry)
{
$entityManager = $managerRegistry->getManager('namedManager');
parent::__construct($entityManager, $entityManager->getClassMetadata(Random::class));
}
}
, но это неправильно, потому что я получил только ObjectManager, а не нужный EntityManager.
Было предложено использовать фабрики, как вZF3 (фабричное определение для DI: https://pastebin.com/XuvB4fU6 и на каждой фабрике определите это так: https://pastebin.com/q5J60d3n), но это должен быть более понятный способ использования нескольких EM без Symfony, не так ли?