複数のデータベースに接続する

次のコードで、現在のグローバルな 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');

記述すれば、追加のデータベースに接続が可能です。

原文:Connecting to Multiple Databases