Соединение с несколькими базами данных в Doctrine2 и Zend Framework - PullRequest
0 голосов
/ 26 марта 2011

В настоящее время я работаю над приложением, созданным с использованием ZF 1.11.3 - Doctrine2 - это используемый компонент ORM.Мне нужно использовать несколько баз данных.В файле application.ini я установил соединения с базой данных следующим образом:

resources.doctrine.dbal.connections.default.parameters.dbname   = "db_name_one"
resources.doctrine.dbal.connections.secondary.parameters.dbname   = "db_name_two"

Как связать классы сущностей Doctrine2 на основе второго соединения с базой данных с этим соединением: Например, если у меня естькласс сущностей из второго соединения как:

/*
   * @Entity
   * @Table(name="tableOnSecondDatabase")
   */
  Class EntityFromSecond
  {

Как Doctrine2 / ZF узнает, какие классы сущностей сопоставлены с базой данных?Спасибо за помощь.

Ответы [ 2 ]

6 голосов
/ 26 марта 2011

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

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

edit Doctrine 2 не поддерживает объединения между базами данных в смысле наличия двух разных соединений и объединения между ними., НАСКОЛЬКО МНЕ ИЗВЕСТНО.Я даже не представляю, как это будет работать на уровне PHP PDO.То, что Vijay предложил для одного, основанного на Doctrine 1 и втором, это не совсем кросс-соединение базы данных, так как Doctrine 1 выполняет 2 запроса и объединяет результаты самостоятельно, что не является оптимальным с точки зрения производительности.

С другой стороны, вы могли бы иметь одно соединение, которое может обращаться к обеим базам данных (то есть, если они находятся на одном сервере БД) или к схемам, если вы подключеныскажем Postgres, и определите ваши сущности так:

//defining first entity
@Entity
@Table(firstSchema.table_name)
class MyEntity

//defining second entity

@Entity
@Table(secondSchema.table_name)
class SecondEntity

Это должно сработать, я считаю

3 голосов
/ 27 марта 2011

Если вы используете две разные базы данных для одного и того же приложения и они независимо обслуживают разные модули в вашем приложении, вы можете выполнить внедрение на уровне плагина и выбрать правильное соединение БД в соответствии с запросом.

В следующей ссылкенесколько баз данных обрабатываются с использованием отдельных соединений.

http://stuf.ro/using-multiple-databases-in-doctrine/

Если у вас есть связь между двумя базами данных и вам нужно получить данные после объединения таблиц из двух из этих баз данных, вы можете создать класс сущности doctrine, указав dbName.tableName.columnName.Это будет немного сложно, но для дальнейшей ссылки посмотрите на следующую ссылку:

http://www.doctrine -project.org / blog / cross-database-joins

...