0

私は、application.iniファイルからパラメーターを読み取ることによってbootstapで作成されたクラシック接続を使用します。より多くの外部DBを使用したいのですが、application.iniから読み取ることができません。私はメインDB(どの外部DBであるか、Webサイトによって異なります)からパラメーターを読み取ることを好みます。では、モデルでどの程度効果的に接続するのでしょうか。これで、使用する必要があるたびにその接続を設定します。また、メインDBを使用する必要がある場合は、再度接続する必要があります。それは非常に効果のない解決策です。

function joinClientDB($id)
{
    $web = $this->getById($id);
    $dbSettings = array();
    $dbSettings['host'] = $web['web_dbHost'];
    $dbSettings['username'] = $web['web_dbUsername'];
    $dbSettings['password'] = $web['web_dbPassword'];
    $dbSettings['dbname'] = $web['web_dbName'];
    $this->_db = Zend_Db::factory('pdo_mysql', $dbSettings);
    $this->_db->query('SET CHARACTER SET ' . $web['web_dbCharset']);
}

function joinDefaultDb()
{
    $this->_db = Zend_Registry::get('db');
}

誰か私にとって簡単な解決策はありますか?

4

1 に答える 1

0

Zend MULTI DB Plugin を使用することをお勧めします。applications.ini にすべてのデータベース接続を追加します。

; Database ONE
resources.multidb.test.adapter = 
resources.multidb.test.dbname = 
resources.multidb.test.username = 
resources.multidb.test.password = ""
resources.multidb.test.host = "your.local.host"
resources.multidb.test.default = true

; Database TWO
resources.multidb.live.adapter = 
resources.multidb.live.dbname = 
resources.multidb.live.username = 
resources.multidb.live.password = ""
resources.multidb.live.host = "your.live.host.com"

そして、それらを再びレジストリに入れることができます (bootstrap.php):

protected function _initDbAdapters()
{
    $this->bootstrap('multidb');
    $resource = $this->getPluginResource('multidb');
    $resource>init();

    $testDB = $resource->getDb('test');
    $liveDB = $resource->getDb('live'); 

    Zend_Registry::set('DB_TEST', $testDB);
    Zend_Registry::set('DB_LIVE', $liveDB);
}
于 2012-05-22T16:44:18.033 に答える