FreeStyle

テクノロジー / アニメ / マンガ / ゲーム

CakePHP 2.x 系 同ホストのデータベースを動的に利用する

同一ホストのデータベースを動的に切り替えられないかなーと思って試してみました。そのときのメモ。

今回の手順としては、まずAppModelにデータベース切り替え用のfunction作成、つぎにcontrollerで呼び出して利用。これだけ!

ではさっそくAppModelにfunctionを追加してみましょう。

<?php
class AppModel extends Model {

	public function Chdb($dbname) {
                // 現在使っているデータベースの情報を取得
		$DB = ConnectionManager::getDataSource($this->useDbConfig);
                // 接続先データベースを変更し、再接続
		$DB->reconnect(array('database' => $dbname));
	}
}

今回は同一ホストであることを前提としていますが、違うホスト同士でやる場合はdatabase.phpに新たなホスト情報を追加し、上記のfanctionの先頭に$this->setDataSource($config);を追加してやればいいかと。($configはControllerで第2引数として渡してAppModel内で受け取る必要あり)

では、Controllerで呼び出してみましょう。

<?php
    //............

    public function index() {
        $data1 = $this->Model名->find('all');
	debug($data1);
        
        $dbname = 'データベース名';
        // 引数にデータベース名を渡して呼び出し
        $this->Model名->Chdb($dbname);
        $data2 = $this->Model名->find('all');
        debug($data2);
    }

これでできるハズ。Component作ったが途中でわけわかんなくなって結局AppModelに書いた。
間違ってるとことかアドバイスとかあったらコメントいただけると幸いです。