複数のデータベースに接続する
次のコードで、現在のグローバルな concrete5 のデータベース接続を取得できることはお伝えしました。
\Database::connection()
それでは、複数のデータベースにアクセスしたい場合も簡単にできます。concrete5 のデータベースに、単にカスタムビジネスデータベーステーブルを追加すれば、Database::connection() でアクセスできるようになります。しかし、もし concrete5 のデータベースにマイグレートできないレガシーなデータベースにアクセスしたい場合はどうすればよいでしょうか。その場合、追加のデータベース接続が必要です。
幸いなことに、設定を追加するだけで可能です。通常、application/config/database.php ファイルには、次のようにひとつの "concrete" データベース接続が定義されています。
return array( 'default-connection' => 'concrete', 'connections' => array( 'concrete' => array( 'driver' => 'c5_pdo_mysql', 'server' => 'localhost', 'database' => 'database', 'username' => 'testuser', 'password' => 'testpassword', 'charset' => 'utf8', ) ), );
単に connections 配列にもうひとつのデータベースを追加すればOKです。次は、"pricing" という名前でレガシーなデータベースへの接続を追加する例です。
return array( 'default-connection' => 'concrete', 'connections' => array( 'concrete' => array( 'driver' => 'c5_pdo_mysql', 'server' => 'localhost', 'database' => 'database', 'username' => 'username', 'password' => 'password', 'charset' => 'utf8', ), 'pricing' => array( 'driver' => 'c5_pdo_mysql', 'server' => 'secure-pricing.wherever.com', 'database' => 'pricing_db', 'username' => 'username', 'password' => 'password', 'charset' => 'utf8', ), ), );
そして、通常の
$db = \Database::connection();
の代わりに、次のように
$db = \Database::connection('pricing');
記述すれば、追加のデータベースに接続が可能です。