问题描述
|
我正在为数据库使用application.ini中的以下配置;
resources.db.adapter = \"Mysqli\"
resources.db.params.host = \"localhost\"
resources.db.params.username = \"root\"
resources.db.params.password = \"root\"
resources.db.params.dbname = \"dbname\"
resources.db.params.charset = \"utf8\"
之后,使用标准的Model / Mapper / DbTable类访问数据库,如下所示
现在,我想访问其他一些数据库,但是具有与本地数据库相同的表结构。如何在要显示其他数据库数据的特定控制器/操作上切换数据库。
谢谢。
解决方法
您可以使用Zend_Application_Resource_Multidb
在标题
Different user/host
下有一个用法示例。
关于Stackoverflow的类似问题
无法使用Zend Framework连接到外部数据库,但是mysql connect可以工作。
编辑:我还发现,即使我的模型中的以下几行从ѭ2继承而来,它也未连接到远程数据库。
protected $_schema = \'otherdb\';
protected $_adapter = \'db_remote\';
所以我在Zend_Db_Table_Abstract中检查了这个功能
protected function _setupDatabaseAdapter()
{
if (! $this->_db) {
$this->_db = self::getDefaultAdapter();
if (!$this->_db instanceof Zend_Db_Adapter_Abstract) {
require_once \'Zend/Db/Table/Exception.php\';
throw new Zend_Db_Table_Exception(\'No adapter found for \' . get_class($this));
}
}
}
如果对您而言相同,则将以下行添加到构造函数中:
public function __construct() {
$front = Zend_Controller_Front::getInstance();
$bootstrap = $front->getParam(\'bootstrap\');
$resource = $bootstrap->getPluginResource(\'multidb\');
$this->_db = $resource->getDb(\'chdpg\');
}