1919use Doctrine \ODM \MongoDB \Mapping \Annotations \Document ;
2020use Doctrine \ODM \MongoDB \Mapping \Driver \AttributeDriver ;
2121use Doctrine \Persistence \Mapping \Driver \MappingDriverChain ;
22+ use Doctrine \Persistence \Proxy ;
2223use InvalidArgumentException ;
2324use MongoDB \Client ;
25+ use ProxyManager \Proxy \LazyLoadingInterface ;
2426use Symfony \Bridge \Doctrine \DependencyInjection \AbstractDoctrineExtension ;
2527use Symfony \Bridge \Doctrine \Messenger \DoctrineClearEntityManagerWorkerSubscriber ;
2628use Symfony \Component \Cache \Adapter \ApcuAdapter ;
@@ -106,6 +108,10 @@ public function load(array $configs, ContainerBuilder $container): void
106108 $ container ->removeDefinition ('doctrine_mongodb.odm.command.load_data_fixtures ' );
107109 }
108110
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+
109115 // load the connections
110116 $ this ->loadConnections ($ config ['connections ' ], $ container );
111117
@@ -117,6 +123,7 @@ public function load(array $configs, ContainerBuilder $container): void
117123 $ config ['default_document_manager ' ],
118124 $ config ['default_database ' ],
119125 $ container ,
126+ $ config ['enable_lazy_ghost_objects ' ],
120127 );
121128
122129 if ($ config ['resolve_target_documents ' ]) {
@@ -198,7 +205,7 @@ protected function overrideParameters(array $options, ContainerBuilder $containe
198205 * @param string $defaultDB The default db name
199206 * @param ContainerBuilder $container A ContainerBuilder instance
200207 */
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
202209 {
203210 $ dms = [];
204211 foreach ($ dmConfigs as $ name => $ documentManager ) {
@@ -208,6 +215,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
208215 $ defaultDM ,
209216 $ defaultDB ,
210217 $ container ,
218+ $ useLazyGhostObject ,
211219 );
212220 $ dms [$ name ] = sprintf ('doctrine_mongodb.odm.%s_document_manager ' , $ name );
213221 }
@@ -223,7 +231,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
223231 * @param string $defaultDB The default db name
224232 * @param ContainerBuilder $container A ContainerBuilder instance
225233 */
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
227235 {
228236 $ connectionName = $ documentManager ['connection ' ] ?? $ documentManager ['name ' ];
229237 $ configurationId = sprintf ('doctrine_mongodb.odm.%s_configuration ' , $ documentManager ['name ' ]);
@@ -257,6 +265,10 @@ protected function loadDocumentManager(array $documentManager, string|null $defa
257265 'setAutoGeneratePersistentCollectionClasses ' => '%doctrine_mongodb.odm.auto_generate_persistent_collection_classes% ' ,
258266 ];
259267
268+ if ($ useLazyGhostObject ) {
269+ $ methods ['setUseLazyGhostObject ' ] = $ useLazyGhostObject ;
270+ }
271+
260272 if (method_exists (ODMConfiguration::class, 'setUseTransactionalFlush ' )) {
261273 $ methods ['setUseTransactionalFlush ' ] = $ documentManager ['use_transactional_flush ' ];
262274 }
0 commit comments