11<?php namespace Mitch \LaravelDoctrine ;
22
33use App ;
4+ use Illuminate \Container \Container ;
5+ use Doctrine \Common \Persistence \ManagerRegistry ;
6+ use Doctrine \DBAL \DriverManager ;
47use Doctrine \ORM \EntityManagerInterface ;
58use Doctrine \ORM \Events ;
69use Doctrine \ORM \EntityManager ;
@@ -38,6 +41,7 @@ public function register()
3841 {
3942 $ this ->registerConfigurationMapper ();
4043 $ this ->registerCacheManager ();
44+ $ this ->registerManagerRegistry ();
4145 $ this ->registerEntityManager ();
4246 $ this ->registerClassMetadataFactory ();
4347
@@ -76,9 +80,9 @@ public function registerCacheManager()
7680 });
7781 }
7882
79- private function registerEntityManager ()
83+ private function registerManagerRegistry ()
8084 {
81- $ this ->app ->singleton (EntityManager ::class, function ($ app ) {
85+ $ this ->app ->singleton (IlluminateRegistry ::class, function ($ app ) {
8286 $ config = $ app ['config ' ]['doctrine::doctrine ' ];
8387 $ metadata = Setup::createAnnotationMetadataConfiguration (
8488 $ config ['metadata ' ],
@@ -97,9 +101,33 @@ private function registerEntityManager()
97101
98102 $ eventManager = new EventManager ;
99103 $ eventManager ->addEventListener (Events::onFlush, new SoftDeletableListener );
100- $ entityManager = EntityManager::create ($ this ->mapLaravelToDoctrineConfig ($ app ['config ' ]), $ metadata , $ eventManager );
101- $ entityManager ->getFilters ()->enable ('trashed ' );
102- return $ entityManager ;
104+
105+ $ defaultDatabase = $ app ['config ' ]['database ' ]['default ' ];
106+ $ databaseConnections = $ app ['config ' ]['database ' ]['connections ' ];
107+
108+ $ registyConnections = array ();
109+ $ registryManagers = array ();
110+
111+ foreach ($ databaseConnections as $ connectionName => $ databaseConfig ) {
112+ $ connection = DriverManager::getConnection ($ this ->mapLaravelToDoctrineConfig ($ databaseConfig ), $ metadata , $ eventManager );
113+ $ registyConnections [$ connectionName ] = "doctrine.dbal. {$ connectionName }_connection " ;
114+ $ app ->instance ($ registyConnections [$ connectionName ], $ connection );
115+
116+ $ entityManager = EntityManager::create ($ connection , $ metadata , $ eventManager );
117+ $ entityManager ->getFilters ()->enable ('trashed ' );
118+ $ registryManagers [$ connectionName ] = "doctrine.orm. {$ connectionName }_entity_manager " ;
119+ $ app ->instance ($ registryManagers [$ connectionName ], $ entityManager );
120+ }
121+
122+ return new IlluminateRegistry ($ app , $ registyConnections , $ registryManagers , $ defaultDatabase , $ defaultDatabase );
123+ });
124+ $ this ->app ->singleton (ManagerRegistry::class, IlluminateRegistry::class);
125+ }
126+
127+ private function registerEntityManager ()
128+ {
129+ $ this ->app ->singleton (EntityManager::class, function ($ app ) {
130+ return $ app ->make (IlluminateRegistry::class)->getManager ();
103131 });
104132 $ this ->app ->singleton (EntityManagerInterface::class, EntityManager::class);
105133 }
@@ -135,19 +163,19 @@ public function provides()
135163 ClassMetadataFactory::class,
136164 DriverMapper::class,
137165 AuthManager::class,
166+ ManagerRegistry::class,
167+ IlluminateRegistry::class,
138168 ];
139169 }
140170
141171 /**
142172 * Map Laravel's to Doctrine's database configuration requirements.
143- * @param $config
173+ * @param $databaseConfig
144174 * @throws \Exception
145175 * @return array
146176 */
147- private function mapLaravelToDoctrineConfig ($ config )
177+ private function mapLaravelToDoctrineConfig ($ databaseConfig )
148178 {
149- $ default = $ config ['database.default ' ];
150- $ connection = $ config ["database.connections. {$ default }" ];
151- return App::make (DriverMapper::class)->map ($ connection );
179+ return App::make (DriverMapper::class)->map ($ databaseConfig );
152180 }
153181}
0 commit comments