Из того, что я нашел здесь , чтобы использовать разные базы данных в приложении Zend, вы можете выбрать один из этих двух возможных способов в зависимости от ваших потребностей:
- Наличие одного хоста / пользователя для двух баз данных
Вы можете указать базу данных, которую хотите использовать для инициализации переменной $_schema
в модели, следующим образом:
class Customer extends Zend_Db_Table_Abstract
{
protected $_name = 'customer';
protected $_schema = 'db_name';
....
}
- Наличие разных хостов / пользователей для двух баз данных
В application.ini
вы должны записать конфигурацию для обеих баз данных следующим образом:
resources.multidb.local.adapter = pdo_mysql
resources.multidb.local.host = localhost
resources.multidb.local.username = user
resources.multidb.local.password = ******
resources.multidb.local.dbname = db_name_1
resources.multidb.local.default = true
resources.multidb.remote.adapter = pdo_mysql
resources.multidb.remote.host = remote_host
resources.multidb.remote.username = user
resources.multidb.remote.password = ******
resources.multidb.remote.dbname = db_name_2
resources.multidb.remote.default = false
Добавление блока _initDbRegistry
в начальную загрузку добавит базы данных в реестр, поэтому вы сможете получить к ним доступ:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* Add databases to the registry
*
* @return void
*/
public function _initDbRegistry()
{
$this->bootstrap('multidb');
$multidb = $this->getPluginResource('multidb');
Zend_Registry::set('db_local', $multidb->getDb('local')); //db_local is going to be the name of the local adapter
Zend_Registry::set('db_remote', $multidb->getDb('remote')); //db_remote is going to be the name of the remote adapter
}
}
Теперь вы можете указать адаптер, который вы хотите использовать для каждой модели, следующим образом:
class Customer extends Zend_Db_Table_Abstract
{
protected $_name = 'customer';
protected $_schema = 'db_name_1';
protected $_adapter = 'db_local'; //Using the local adapter
....
}
class Product extends Zend_Db_Table_Abstract
{
protected $_name = 'product';
protected $_schema = 'db_name_2';
protected $_adapter = 'db_remote'; //Using the remote adapter
....
}