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..7a36517 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,11 +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'], - $app[CacheManager::class]->getCache($config['cache_provider']), + $cacheProvider, $config['simple_annotations'] ); $metadata->addFilter('trashed', TrashedFilter::class); @@ -124,6 +129,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);