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