Несколько баз данных с префиксами

Я начинающий разработчик Zend Framework 2 и Doctrine. Я не смог найти ответы на проблемы, описанные ниже.

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

  • Как я могу использовать несколько баз данных в одном проекте с правильными отношениями между таблицами?
  • Как/где я должен хранить конфигурацию базы данных?
  • Как/где я должен хранить объекты?

В одном проекте я использую несколько версий баз данных (разработка, тестирование, производство), поэтому я хочу использовать префиксы для имени базы данных. Например, dev_users и tst_users. Я думаю, что мне следует использовать префикс из файла конфигурации и использовать его где-нибудь для префикса баз данных.

  • Как мне префиксировать все базы данных?

Наконец, мне действительно любопытно, как другие люди используют объекты базы данных, когда их используют несколько модулей.


person W. de Brei    schedule 08.04.2014    source источник


Ответы (1)


  • Как я могу использовать несколько баз данных в одном проекте с правильными отношениями между таблицами?

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

Однако вы можете применить ограничение самостоятельно и использовать два отдельных менеджера сущностей, однако я бы не рекомендовал это

  • Как/где я должен хранить конфигурацию базы данных?

детали подключения к базе данных должны храниться в вашем /config/autoload/local.php или /config/autoload/{ownname}.local.php, а для собственного имени вы можете, например, выбрать «doctrine»

доктрина.local.php

<?php

return array(
    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'configuration' => 'orm_default',
                'driverClass' =>'Doctrine\DBAL\Driver\PDOMySql\Driver',
                'eventmanager' => 'orm_default',
                'params' => array(
                    'host' => 'localhost',
                    'port' => '3306',
                    'user' => '{username}',
                    'password' => '{password}',
                    'dbname' => '{db}',
                ),
            ),
        ),
    ),
);

Общая настройка доктрины, например, где находятся ваши сущности для чтения метаданных класса, может быть помещена в файл /config/autoload/global.php или в файл, оканчивающийся на global.php, как в предыдущем случае с локальным, или вы можете сохранить его в файле конфигурации ваших модулей.

  • Как/где я должен хранить объекты?

Сущности должны храниться в вашем модуле в каталоге Entity, например: root/module/{modulename}/src/{modulename}/Entity/

о том, как их хранить, см.: Документация по доктрине

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

  • Режим тестирования

Вы можете изменить свои базы данных самостоятельно для тестовых сред или использовать модуль для переключения между файлами конфигурации, например: Модуль конфигурации Который сделан людьми, которые сделали ZF2

person Mitchell Olsthoorn    schedule 08.04.2014
comment
Это конфигурация, которую я использую сейчас. Его нельзя использовать для нескольких баз данных, поскольку {db} установлен только для одного db. И это не работает для префикса баз данных. - person W. de Brei; 08.04.2014
comment
Если вы создаете абстрактную фабрику, вы можете префиксировать свои службы в диспетчере служб и создавать столько адаптеров из предоставленной вами конфигурации. - person Mitchell Olsthoorn; 09.04.2014