1
1
<?php namespace Mitch \LaravelDoctrine ;
2
2
3
3
use App ;
4
+ use Illuminate \Container \Container ;
5
+ use Doctrine \Common \Persistence \ManagerRegistry ;
6
+ use Doctrine \DBAL \DriverManager ;
4
7
use Doctrine \ORM \EntityManagerInterface ;
5
8
use Doctrine \ORM \Events ;
6
9
use Doctrine \ORM \EntityManager ;
@@ -38,6 +41,7 @@ public function register()
38
41
{
39
42
$ this ->registerConfigurationMapper ();
40
43
$ this ->registerCacheManager ();
44
+ $ this ->registerManagerRegistry ();
41
45
$ this ->registerEntityManager ();
42
46
$ this ->registerClassMetadataFactory ();
43
47
@@ -76,9 +80,9 @@ public function registerCacheManager()
76
80
});
77
81
}
78
82
79
- private function registerEntityManager ()
83
+ private function registerManagerRegistry ()
80
84
{
81
- $ this ->app ->singleton (EntityManager ::class, function ($ app ) {
85
+ $ this ->app ->singleton (IlluminateRegistry ::class, function ($ app ) {
82
86
$ config = $ app ['config ' ]['doctrine::doctrine ' ];
83
87
$ metadata = Setup::createAnnotationMetadataConfiguration (
84
88
$ config ['metadata ' ],
@@ -97,9 +101,33 @@ private function registerEntityManager()
97
101
98
102
$ eventManager = new EventManager ;
99
103
$ 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 ();
103
131
});
104
132
$ this ->app ->singleton (EntityManagerInterface::class, EntityManager::class);
105
133
}
@@ -135,19 +163,19 @@ public function provides()
135
163
ClassMetadataFactory::class,
136
164
DriverMapper::class,
137
165
AuthManager::class,
166
+ ManagerRegistry::class,
167
+ IlluminateRegistry::class,
138
168
];
139
169
}
140
170
141
171
/**
142
172
* Map Laravel's to Doctrine's database configuration requirements.
143
- * @param $config
173
+ * @param $databaseConfig
144
174
* @throws \Exception
145
175
* @return array
146
176
*/
147
- private function mapLaravelToDoctrineConfig ($ config )
177
+ private function mapLaravelToDoctrineConfig ($ databaseConfig )
148
178
{
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 );
152
180
}
153
181
}
0 commit comments