protected function createDoctrineConfig($cache)
{
$debug = config('doctrine.debug', config('app.debug', false));
$metadataConfig = config('doctrine.metadata', ['driver' => 'config']);
$proxyDir = config('doctrine.proxy_classes.directory', storage_path('doctrine/proxies'));
// Note: Don't worry, caches are configured below.
$doctrineConfig = Setup::createConfiguration($debug, $proxyDir, null);
if (!empty($metadataConfig) && isset($metadataConfig[0]) && is_array($metadataConfig[0])) {
$metadataDriver = new \Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain();
foreach ($metadataConfig as $subDriverConfig) {
if (!is_array($subDriverConfig)) {
continue;
}
$metadataDriver->addDriver($this->createMetadataDriver($doctrineConfig, $subDriverConfig), array_get($subDriverConfig, 'namespace', 'App'));
if (isset($subDriverConfig['namespace']) && isset($subDriverConfig['alias'])) {
$doctrineConfig->addEntityNamespace($subDriverConfig['alias'], $subDriverConfig['namespace']);
}
}
} else {
$metadataDriver = $this->createMetadataDriver($doctrineConfig, $metadataConfig);
}
$doctrineConfig->setMetadataDriverImpl($metadataDriver);
//add in trig functions to doctrine for mysql
$doctrineConfig->setCustomDatetimeFunctions(config('doctrine.custom_datetime_functions') ?: []);
$doctrineConfig->setCustomNumericFunctions(config('doctrine.custom_numeric_functions') ?: []);
$doctrineConfig->setCustomStringFunctions(config('doctrine.custom_string_functions') ?: []);
// Note: These must occur after Setup::createAnnotationMetadataConfiguration() in order to set custom namespaces properly
if ($cache) {
$doctrineConfig->setMetadataCacheImpl($cache);
$doctrineConfig->setQueryCacheImpl($cache);
$doctrineConfig->setResultCacheImpl($cache);
}
$doctrineConfig->setAutoGenerateProxyClasses(config('doctrine.proxy_classes.auto_generate', !$debug));
$doctrineConfig->setDefaultRepositoryClassName(config('doctrine.default_repository', '\\Doctrine\\ORM\\EntityRepository'));
$doctrineConfig->setSQLLogger(config('doctrine.sql_logger'));
if ($proxyClassNamespace = config('doctrine.proxy_classes.namespace')) {
$doctrineConfig->setProxyNamespace($proxyClassNamespace);
}
return $doctrineConfig;
}