Intereting Posts
Хорошее программное обеспечение для анализа / статистики с открытым исходным кодом на PHP? Пользовательские отношения Laravel перестали работать Изменить регистр / Забыли пароль «ссылки на действия» URL-адреса, заголовки и изменить страницы ошибок. Тема Мой подключаемый модуль с плагином WordPress multisite Предотвратите тайм-аут сеанса, если работает таймер javascript Есть ли у PHP структуры или перечисления, а если нет, то какая из них лучшая для них? PHP испускает 500 на ошибках – где это документировано? Swift: как запросить внешнюю базу данных для входа в систему? отправить изображение с android на сервер MySQL PHP включает файловую стратегию Как отправить содержимое внешнего файла на принтер? PHP – Многомерный массив для CSV Проверка того, является ли продукт Magento дочерним по отношению к настраиваемому продукту функция возвращает только первое значение массива с результатом запроса mysqli лучший способ предотвращения атаки xss Проблема с output_buffering и php.ini

Несколько соединений с базой данных в структурах Doctrine2 и Zend

В настоящее время я работаю над приложением, которое создается с использованием 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. Это будет немного сложно, но для дальнейшего ознакомления посмотрите на следующую ссылку:

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