Другие сущности / прокси-каталоги для Doctrine 2 - PullRequest
0 голосов
/ 15 марта 2011

Я использую доктрину 2 в своем проекте, но я разделяю все свои модули на разные папки, чтобы сущности доктрины 2 находились в разных каталогах в зависимости от того, к какому модулю они принадлежат.

Мне интересно, если этоВозможно изменить сущность Doctrine2 и настройки директории прокси при использовании существующего соединения с базой данных.Я заглянул в класс EntityManager, но не вижу функции для обновления конфигурации.

Если встроенного решения нет, кто-нибудь знает, будет ли эта функция работать в классе EntityManager:

public function updateConfiguration(Configuration $config)
{
    $this->config = $config;

    $metadataFactoryClassName = $config->getClassMetadataFactoryName();
    $this->metadataFactory = new $metadataFactoryClassName;
    $this->metadataFactory->setEntityManager($this);
    $this->metadataFactory->setCacheDriver($this->config->getMetadataCacheImpl());

    $this->proxyFactory = new ProxyFactory($this,
            $config->getProxyDir(),
            $config->getProxyNamespace(),
            $config->getAutoGenerateProxyClasses());
}

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Можно получить $ config из Entity Manager следующим образом:

$config = $em->getConfiguration();

Для динамического обновления путей к объектам попробуйте это (я сам не пробовал):

$driverImpl = new Doctrine\ORM\Mapping\Driver\AnnotationDriver(array(
    APP_PATH . DIRECTORY_SEPARATOR .  'entities'
));
$config->setMetadataDriverImpl($driverImpl);

PS> Я думаю, что это должно сработать, но я не пробовал это, поэтому поправьте меня, если это не так.

1 голос
/ 15 марта 2011

Не совсем понятно, что именно вы имеете в виду, но я попробую.

Соединение с базой данных является частью EntityManager, но они не совпадают.Внесение изменений в соединение с базой данных, насколько я знаю, невозможно, если соединение уже установлено.

Вы должны быть уверены, что настроили все конфигурации, прежде чем создавать экземпляр EntityManger.Вы можете определить свою конфигурацию настолько гибкой, насколько захотите, но как только вы создадите сущность, вы не сможете ее изменить (поправьте меня, если я ошибаюсь).Если вы сделаете это, это может вызвать проблемы с другими объектами, которые уже загружены, и, например, ваши сбрасывающие вызовы могут быть неудачными.

Если вы хотите загрузить объекты из другого местоположения, вы можете работать с загрузчиком классов Doctrine.Назначьте все сущности модуля в пространство имен и загрузите это пространство имен из любого места в вашей файловой системе.

Пример небольшого кода

// Doctrine module
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', "/var/www/library/Doctrine/");
$classLoader->register();

// User modules
$classLoader = new \Doctrine\Common\ClassLoader('User', "/var/www/modules/models/User/");
$classLoader->register();

// Page module
$classLoader = new \Doctrine\Common\ClassLoader('Page', "/some/path/to/different/modules/models/Page/");
$classLoader->register();

Я не вижу смысла в изменении настроекваш EntityManager во время запроса.Если вам нужно сделать это, вы пытаетесь решить вашу проблему не в том месте.Я никогда даже не пробовал и не хочу в любом случае:).

Может быть, я не понял вашего вопроса.Если это так, пожалуйста, дайте мне знать:).

...