[ ZendFramework1 ] 複数のDB接続先を application.ini に設定する ( Zend_Application_Resource_Multidb )

Pocket

ここでは、複数のデータベースの接続先を application.ini に設定するサンプルを掲載しています。具体的には、application.ini に設定可能な Zend_Application_Resource_Db および Zend_Application_Resource_Multidb リソースプラグインを使用したサンプルになります。

スポンサーリンク

接続先が1つの場合 ( Zend_Application_Resource_Db )

まずは、接続先が1つの場合で Zend_Application_Resource_Db リソースプラグインの使用例です。複数の設定方法が知りたい方は読み飛ばしてください。

application.ini

resources.db.adapter  = "oracle"
resources.db.username = "username1"
resources.db.password = "password1"
resources.db.dbname   = "dbname1"
resources.db.charset  = "utf8"

その他

resources.db.defaultMetadataCache でキャッシュの設定も行うこともできます。テーブル定義情報などを動的に取得する場合などは、キャッシュを使用して、パフォーマンスの向上を図ることが一般的(?)です。

※ ちなみに、テーブル情報は各アダプタに実装されている describeTable 関数で取得できます

アダプタ情報を取得方法

application.ini に設定した内容にアクセスするサンプルは次の通りです。

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        /* データベースアダプタ(Zend_Db_Adapter_Abstract)取得方法 */
        $bootstrap = $this->getInvokeArg('bootstrap');
        $resource  = $bootstrap->getPluginResource('db');
        
        $db = $resource->getDbAdapter();
    }
}

接続先が複数の場合 ( Zend_Application_Resource_Multidb )

Zend_Application_Resource_Multidb は Zend_Application_Resource_Db と異なり、名前の通り複数の接続情報を設定しておくことができます。

Zend_Application_Resource_Multidb の application.ini への設定例と、アクション内で Zend_Db へアクセスするサンプルコードは次の通りです。

application.ini

// 接続情報1
resources.multidb.db1.adapter  = "oracle"
resources.multidb.db1.username = "username1"
resources.multidb.db1.password = "password1"
resources.multidb.db1.dbname   = "dbname1"
resources.multidb.db1.charset  = "utf8"
resources.multidb.db1.default  = true

// 接続情報2
resources.multidb.db2.adapter  = "oracle"
resources.multidb.db2.username = "username2"
resources.multidb.db2.password = "password2"
resources.multidb.db2.dbname   = "dbname2"
resources.multidb.db2.charset  = "utf8"

アダプタを取得するサンプルコード

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        /* データベースアダプタ(Zend_Db_Adapter_Abstract)取得方法 */
        $bootstrap = $this->getInvokeArg('bootstrap');
        $resource  = $bootstrap->getPluginResource('multidb');
        
        // db1 を取得
        $db1 = $resource->getDb('db1');

        // db2 を取得
        $db2 = $resource->getDb('db2');

        // パラメータなしの場合はデフォルトアダプタが取得できる
        $defaultDb = $resource->getDb();
    }
}
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>