ここでは、複数のデータベースの接続先を 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(); } }