Skip to content

Commit

Permalink
No update required. Activate lazy ghost objects only when possible.
Browse files Browse the repository at this point in the history
  • Loading branch information
GromNaN committed Jan 23, 2025
1 parent 6d1cacd commit 3a16ec8
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 6 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"php": "^8.1",
"ext-mongodb": "^1.16",
"composer-runtime-api": "^2.0",
"doctrine/mongodb-odm": "^2.10@dev",
"doctrine/mongodb-odm": "^2.6",
"doctrine/persistence": "^3.0",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"symfony/config": "^6.4 || ^7.0",
Expand Down
2 changes: 1 addition & 1 deletion config/mongodb.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
'%doctrine_mongodb.odm.document_managers%',
'%doctrine_mongodb.odm.default_connection%',
'%doctrine_mongodb.odm.default_document_manager%',
Proxy::class,
abstract_arg('Proxy Interface Name'),
service('service_container'),
])

Expand Down
1 change: 1 addition & 0 deletions src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use function is_array;
use function is_string;
use function json_decode;
use function method_exists;

Check failure on line 18 in src/DependencyInjection/Configuration.php

View workflow job for this annotation

GitHub Actions / Coding Standards / Coding Standards (PHP: 8.4)

Type method_exists is not used in this file.
use function preg_match;

/**
Expand Down
24 changes: 20 additions & 4 deletions src/DependencyInjection/DoctrineMongoDBExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
use Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
use Doctrine\ODM\MongoDB\Mapping\Driver\AttributeDriver;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use Doctrine\Persistence\Proxy;
use InvalidArgumentException;
use MongoDB\Client;
use ProxyManager\Proxy\LazyLoadingInterface;
use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension;
use Symfony\Bridge\Doctrine\Messenger\DoctrineClearEntityManagerWorkerSubscriber;
use Symfony\Component\Cache\Adapter\ApcuAdapter;
Expand All @@ -46,6 +48,7 @@
use function in_array;
use function interface_exists;
use function is_dir;
use function method_exists;
use function sprintf;

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

// Requires doctrine/mongodb-odm 2.10
$useLazyGhostObject = method_exists(ODMConfiguration::class, 'setUseLazyGhostObject');
$container->getDefinition('doctrine_mongodb')
->setArgument(5, $useLazyGhostObject ? Proxy::class : LazyLoadingInterface::class);

// load the connections
$this->loadConnections($config['connections'], $container);

Expand All @@ -116,6 +124,7 @@ public function load(array $configs, ContainerBuilder $container): void
$config['default_document_manager'],
$config['default_database'],
$container,
$useLazyGhostObject,
);

if ($config['resolve_target_documents']) {
Expand Down Expand Up @@ -197,7 +206,7 @@ protected function overrideParameters(array $options, ContainerBuilder $containe
* @param string $defaultDB The default db name
* @param ContainerBuilder $container A ContainerBuilder instance
*/
protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM, string $defaultDB, ContainerBuilder $container): void
protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM, string $defaultDB, ContainerBuilder $container, bool $useLazyGhostObject = false): void
{
$dms = [];
foreach ($dmConfigs as $name => $documentManager) {
Expand All @@ -207,6 +216,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
$defaultDM,
$defaultDB,
$container,
$useLazyGhostObject,
);
$dms[$name] = sprintf('doctrine_mongodb.odm.%s_document_manager', $name);
}
Expand All @@ -222,7 +232,7 @@ protected function loadDocumentManagers(array $dmConfigs, string|null $defaultDM
* @param string $defaultDB The default db name
* @param ContainerBuilder $container A ContainerBuilder instance
*/
protected function loadDocumentManager(array $documentManager, string|null $defaultDM, string $defaultDB, ContainerBuilder $container): void
protected function loadDocumentManager(array $documentManager, string|null $defaultDM, string $defaultDB, ContainerBuilder $container, bool $useLazyGhostObject = false): void
{
$connectionName = $documentManager['connection'] ?? $documentManager['name'];
$configurationId = sprintf('doctrine_mongodb.odm.%s_configuration', $documentManager['name']);
Expand Down Expand Up @@ -254,10 +264,16 @@ protected function loadDocumentManager(array $documentManager, string|null $defa
'setPersistentCollectionDir' => '%doctrine_mongodb.odm.persistent_collection_dir%',
'setPersistentCollectionNamespace' => '%doctrine_mongodb.odm.persistent_collection_namespace%',
'setAutoGeneratePersistentCollectionClasses' => '%doctrine_mongodb.odm.auto_generate_persistent_collection_classes%',
'setUseLazyGhostObject' => true,
'setUseTransactionalFlush' => $documentManager['use_transactional_flush'],
];

if ($useLazyGhostObject) {
$methods['setUseLazyGhostObject'] = $useLazyGhostObject;
}

if (method_exists(ODMConfiguration::class, 'setUseTransactionalFlush')) {
$methods['setUseTransactionalFlush'] = $documentManager['use_transactional_flush'];
}

if ($documentManager['repository_factory']) {
$methods['setRepositoryFactory'] = new Reference($documentManager['repository_factory']);
}
Expand Down

0 comments on commit 3a16ec8

Please sign in to comment.