В настоящее время я работаю над приложением, которое создается с использованием 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 знает, какие классы объектов сопоставляются с базой данных? Спасибо за помощь.
Я не разбавляю, вы можете привязать сущность к определенному соединению, это не имеет смысла в архитектуре Doctrine 2.
С другой стороны, вы можете сделать два EntityManager, каждый из которых имеет разные параметры подключения. Вы должны решить в своей бизнес-логике, с какой организацией обрабатывается менеджер подключений.
edit Doctrine 2 не поддерживает соединения кросс-базы в смысле наличия двух разных соединений и соединения между ними, AFAIK. Я даже не могу себе представить, как это будет работать на уровне PDO PHP. Что 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
Это должно работать, я считаю
Если вы используете две разные базы данных для одного и того же приложения и независимо друг от друга используете разные модули в своем приложении, вы можете выполнить инъекцию уровня плагина и выбрать правильное соединение db в соответствии с запросом.
В следующей ссылке несколько баз данных обрабатываются с использованием отдельных подключений.
http://stuf.ro/using-multiple-databases-in-doctrine/
Если у вас есть связь между двумя базами данных и вам необходимо получить данные после объединения таблиц из двух этих баз данных, вы можете создать класс сущности doctrine, указав имя dbName.tableName.columnName. Это будет немного сложно, но для дальнейшего ознакомления посмотрите на следующую ссылку: