From a7c035338d0cf506a970d74e09e5e3a33469cebd Mon Sep 17 00:00:00 2001 From: Dominik Dera Date: Wed, 12 Aug 2015 17:58:06 +0100 Subject: [PATCH 1/2] Introduce `cache-key-namespace` configuration --- config/doctrine.php | 5 +++++ src/LaravelDoctrineServiceProvider.php | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/config/doctrine.php b/config/doctrine.php index 67562f4..5b00de8 100644 --- a/config/doctrine.php +++ b/config/doctrine.php @@ -16,6 +16,11 @@ // Available: null, apc, xcache, redis, memcache 'cache_provider' => null, + // A string that will act as a prefix for cached values' keys. + // When left as `null`, this will be internally defaulted to: + // "dc2_" . md5($proxyDir) . "_", see: Doctrine\ORM\Tools\Setup + 'cache_key_namespace' => null, + 'cache' => [ 'redis' => [ 'host' => '127.0.0.1', diff --git a/src/LaravelDoctrineServiceProvider.php b/src/LaravelDoctrineServiceProvider.php index 4e42049..ea0814d 100644 --- a/src/LaravelDoctrineServiceProvider.php +++ b/src/LaravelDoctrineServiceProvider.php @@ -6,6 +6,7 @@ use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Tools\Setup; +use Doctrine\Common\Cache\CacheProvider; use Doctrine\Common\EventManager; use Illuminate\Auth\AuthManager; use Illuminate\Support\ServiceProvider; @@ -98,10 +99,15 @@ private function registerEntityManager() { $this->app->singleton(EntityManager::class, function ($app) { $config = $app['config']['doctrine::doctrine']; + + /** @var CacheProvider|null $cacheProvider */ + $cacheProvider = $app['Mitch\LaravelDoctrine\CacheManager']->getCache($config['cache_provider']); + $metadata = Setup::createAnnotationMetadataConfiguration( $config['metadata'], $app['config']['app.debug'], $config['proxy']['directory'], + $cacheProvider, $app[CacheManager::class]->getCache($config['cache_provider']), $config['simple_annotations'] ); @@ -124,6 +130,17 @@ private function registerEntityManager() $eventManager->addEventListener(Events::loadClassMetadata, $tablePrefix); } + /* + * We need to do that here, because the namespace is defaulted in + * Setup::createAnnotationMetadataConfiguration + */ + if ( + isset($config['cache_key_namespace']) + && $cacheProvider + ) { + $cacheProvider->setNamespace($config['cache_key_namespace']); + } + $eventManager->addEventListener(Events::onFlush, new SoftDeletableListener); $entityManager = EntityManager::create($connection_config, $metadata, $eventManager); From a8ca5602a097ae41a3c51ef67e57d9387d906b6c Mon Sep 17 00:00:00 2001 From: Dominik Dera Date: Thu, 13 Aug 2015 12:19:32 +0100 Subject: [PATCH 2/2] Fix critical bug, when instantiating Doctrine's configuration --- src/LaravelDoctrineServiceProvider.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/LaravelDoctrineServiceProvider.php b/src/LaravelDoctrineServiceProvider.php index ea0814d..7a36517 100644 --- a/src/LaravelDoctrineServiceProvider.php +++ b/src/LaravelDoctrineServiceProvider.php @@ -108,7 +108,6 @@ private function registerEntityManager() $app['config']['app.debug'], $config['proxy']['directory'], $cacheProvider, - $app[CacheManager::class]->getCache($config['cache_provider']), $config['simple_annotations'] ); $metadata->addFilter('trashed', TrashedFilter::class);