19
19
use Doctrine \ODM \MongoDB \Mapping \Annotations \Document ;
20
20
use Doctrine \ODM \MongoDB \Mapping \Driver \AttributeDriver ;
21
21
use Doctrine \Persistence \Mapping \Driver \MappingDriverChain ;
22
+ use Doctrine \Persistence \Proxy ;
22
23
use InvalidArgumentException ;
23
24
use MongoDB \Client ;
25
+ use ProxyManager \Proxy \LazyLoadingInterface ;
24
26
use Symfony \Bridge \Doctrine \DependencyInjection \AbstractDoctrineExtension ;
25
27
use Symfony \Bridge \Doctrine \Messenger \DoctrineClearEntityManagerWorkerSubscriber ;
26
28
use Symfony \Component \Cache \Adapter \ApcuAdapter ;
@@ -106,6 +108,10 @@ public function load(array $configs, ContainerBuilder $container): void
106
108
$ container ->removeDefinition ('doctrine_mongodb.odm.command.load_data_fixtures ' );
107
109
}
108
110
111
+ // Requires doctrine/mongodb-odm 2.10
112
+ $ container ->getDefinition ('doctrine_mongodb ' )
113
+ ->setArgument (5 , $ config ['enable_lazy_ghost_objects ' ] ? Proxy::class : LazyLoadingInterface::class);
114
+
109
115
// load the connections
110
116
$ this ->loadConnections ($ config ['connections ' ], $ container );
111
117
@@ -117,6 +123,7 @@ public function load(array $configs, ContainerBuilder $container): void
117
123
$ config ['default_document_manager ' ],
118
124
$ config ['default_database ' ],
119
125
$ container ,
126
+ $ config ['enable_lazy_ghost_objects ' ],
120
127
);
121
128
122
129
if ($ config ['resolve_target_documents ' ]) {
@@ -198,7 +205,7 @@ protected function overrideParameters(array $options, ContainerBuilder $containe
198
205
* @param string $defaultDB The default db name
199
206
* @param ContainerBuilder $container A ContainerBuilder instance
200
207
*/
201
- protected function loadDocumentManagers (array $ dmConfigs , string |null $ defaultDM , string $ defaultDB , ContainerBuilder $ container ): void
208
+ protected function loadDocumentManagers (array $ dmConfigs , string |null $ defaultDM , string $ defaultDB , ContainerBuilder $ container, bool $ useLazyGhostObject = false ): void
202
209
{
203
210
$ dms = [];
204
211
foreach ($ dmConfigs as $ name => $ documentManager ) {
@@ -208,6 +215,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
208
215
$ defaultDM ,
209
216
$ defaultDB ,
210
217
$ container ,
218
+ $ useLazyGhostObject ,
211
219
);
212
220
$ dms [$ name ] = sprintf ('doctrine_mongodb.odm.%s_document_manager ' , $ name );
213
221
}
@@ -223,7 +231,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
223
231
* @param string $defaultDB The default db name
224
232
* @param ContainerBuilder $container A ContainerBuilder instance
225
233
*/
226
- protected function loadDocumentManager (array $ documentManager , string |null $ defaultDM , string $ defaultDB , ContainerBuilder $ container ): void
234
+ protected function loadDocumentManager (array $ documentManager , string |null $ defaultDM , string $ defaultDB , ContainerBuilder $ container, bool $ useLazyGhostObject = false ): void
227
235
{
228
236
$ connectionName = $ documentManager ['connection ' ] ?? $ documentManager ['name ' ];
229
237
$ configurationId = sprintf ('doctrine_mongodb.odm.%s_configuration ' , $ documentManager ['name ' ]);
@@ -257,6 +265,10 @@ protected function loadDocumentManager(array $documentManager, string|null $defa
257
265
'setAutoGeneratePersistentCollectionClasses ' => '%doctrine_mongodb.odm.auto_generate_persistent_collection_classes% ' ,
258
266
];
259
267
268
+ if ($ useLazyGhostObject ) {
269
+ $ methods ['setUseLazyGhostObject ' ] = $ useLazyGhostObject ;
270
+ }
271
+
260
272
if (method_exists (ODMConfiguration::class, 'setUseTransactionalFlush ' )) {
261
273
$ methods ['setUseTransactionalFlush ' ] = $ documentManager ['use_transactional_flush ' ];
262
274
}
0 commit comments