Skip to content

Commit 3a16ec8

Browse files
committed
No update required. Activate lazy ghost objects only when possible.
1 parent 6d1cacd commit 3a16ec8

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"php": "^8.1",
2828
"ext-mongodb": "^1.16",
2929
"composer-runtime-api": "^2.0",
30-
"doctrine/mongodb-odm": "^2.10@dev",
30+
"doctrine/mongodb-odm": "^2.6",
3131
"doctrine/persistence": "^3.0",
3232
"psr/log": "^1.0 || ^2.0 || ^3.0",
3333
"symfony/config": "^6.4 || ^7.0",

config/mongodb.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
'%doctrine_mongodb.odm.document_managers%',
5555
'%doctrine_mongodb.odm.default_connection%',
5656
'%doctrine_mongodb.odm.default_document_manager%',
57-
Proxy::class,
57+
abstract_arg('Proxy Interface Name'),
5858
service('service_container'),
5959
])
6060

src/DependencyInjection/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use function is_array;
1616
use function is_string;
1717
use function json_decode;
18+
use function method_exists;
1819
use function preg_match;
1920

2021
/**

src/DependencyInjection/DoctrineMongoDBExtension.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
use Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
2020
use Doctrine\ODM\MongoDB\Mapping\Driver\AttributeDriver;
2121
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
22+
use Doctrine\Persistence\Proxy;
2223
use InvalidArgumentException;
2324
use MongoDB\Client;
25+
use ProxyManager\Proxy\LazyLoadingInterface;
2426
use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension;
2527
use Symfony\Bridge\Doctrine\Messenger\DoctrineClearEntityManagerWorkerSubscriber;
2628
use Symfony\Component\Cache\Adapter\ApcuAdapter;
@@ -46,6 +48,7 @@
4648
use function in_array;
4749
use function interface_exists;
4850
use function is_dir;
51+
use function method_exists;
4952
use function sprintf;
5053

5154
/**
@@ -105,6 +108,11 @@ public function load(array $configs, ContainerBuilder $container): void
105108
$container->removeDefinition('doctrine_mongodb.odm.command.load_data_fixtures');
106109
}
107110

111+
// Requires doctrine/mongodb-odm 2.10
112+
$useLazyGhostObject = method_exists(ODMConfiguration::class, 'setUseLazyGhostObject');
113+
$container->getDefinition('doctrine_mongodb')
114+
->setArgument(5, $useLazyGhostObject ? Proxy::class : LazyLoadingInterface::class);
115+
108116
// load the connections
109117
$this->loadConnections($config['connections'], $container);
110118

@@ -116,6 +124,7 @@ public function load(array $configs, ContainerBuilder $container): void
116124
$config['default_document_manager'],
117125
$config['default_database'],
118126
$container,
127+
$useLazyGhostObject,
119128
);
120129

121130
if ($config['resolve_target_documents']) {
@@ -197,7 +206,7 @@ protected function overrideParameters(array $options, ContainerBuilder $containe
197206
* @param string $defaultDB The default db name
198207
* @param ContainerBuilder $container A ContainerBuilder instance
199208
*/
200-
protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM, string $defaultDB, ContainerBuilder $container): void
209+
protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM, string $defaultDB, ContainerBuilder $container, bool $useLazyGhostObject = false): void
201210
{
202211
$dms = [];
203212
foreach ($dmConfigs as $name => $documentManager) {
@@ -207,6 +216,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
207216
$defaultDM,
208217
$defaultDB,
209218
$container,
219+
$useLazyGhostObject,
210220
);
211221
$dms[$name] = sprintf('doctrine_mongodb.odm.%s_document_manager', $name);
212222
}
@@ -222,7 +232,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
222232
* @param string $defaultDB The default db name
223233
* @param ContainerBuilder $container A ContainerBuilder instance
224234
*/
225-
protected function loadDocumentManager(array $documentManager, string|null $defaultDM, string $defaultDB, ContainerBuilder $container): void
235+
protected function loadDocumentManager(array $documentManager, string|null $defaultDM, string $defaultDB, ContainerBuilder $container, bool $useLazyGhostObject = false): void
226236
{
227237
$connectionName = $documentManager['connection'] ?? $documentManager['name'];
228238
$configurationId = sprintf('doctrine_mongodb.odm.%s_configuration', $documentManager['name']);
@@ -254,10 +264,16 @@ protected function loadDocumentManager(array $documentManager, string|null $defa
254264
'setPersistentCollectionDir' => '%doctrine_mongodb.odm.persistent_collection_dir%',
255265
'setPersistentCollectionNamespace' => '%doctrine_mongodb.odm.persistent_collection_namespace%',
256266
'setAutoGeneratePersistentCollectionClasses' => '%doctrine_mongodb.odm.auto_generate_persistent_collection_classes%',
257-
'setUseLazyGhostObject' => true,
258-
'setUseTransactionalFlush' => $documentManager['use_transactional_flush'],
259267
];
260268

269+
if ($useLazyGhostObject) {
270+
$methods['setUseLazyGhostObject'] = $useLazyGhostObject;
271+
}
272+
273+
if (method_exists(ODMConfiguration::class, 'setUseTransactionalFlush')) {
274+
$methods['setUseTransactionalFlush'] = $documentManager['use_transactional_flush'];
275+
}
276+
261277
if ($documentManager['repository_factory']) {
262278
$methods['setRepositoryFactory'] = new Reference($documentManager['repository_factory']);
263279
}

0 commit comments

Comments
 (0)