CakePHPで複数のデータベースを扱う方法と切り替え

CakePHPで複数のデータベースを扱う方法
CakePHPは一つのCakeのアプリケーション内でデータベースを複数扱うことが可能で、
database.phpに配列形式でいくつも設定できます。
データベースの複数定義
app/config/database.php
以下のように全く違う場所にあるデータベースを扱うことも可能です。
//一つは設定しなきゃだめ
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => '123.123.456.789',
'login' => 'hoge.com',
'password' => 'hoge2012',
'database' => 'hogehoge',
'prefix' => '',
'encoding' => 'utf8',
);
//今回追加した別のデータベース
var $hoge = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'hoge',
'password' => 'hoge2012',
'database' => 'hoge',
'prefix' => '',
'encoding' => 'utf8',
);
}
各データベースの呼び出し
controllersにDBの切り替えを記述
普段は$defaultを扱い、たまに別のデータベースを扱うならコントローラーに書きます
$this->Model->setDataSource('hoge');//DB変更
$this->Model->setDataSource('default');//DBを元に戻す
componentsにDBの切り替えを記述
controllersにデータベースの切り替えが書けるなら、componentsにだって書けます。
変数や渡されたパラメータによってデータベースの切り替えます。
function hoge_func($hoge) {
if($hoge == '1'){
$this->controller->List->useDbConfig = 'default';
$this->controller->Item->useDbConfig = 'default';
}elseif($hoge == '2'){
$this->controller->List->useDbConfig = 'hoge';
$this->controller->Item->useDbConfig = 'hoge';
}
}
ModelにDBの切り替えを記述
これはModel(テーブル名)によって、完全にデータベースを分離させたい時に使えますね。
データベースが肥大化してしまった時などによさそうです。(まあそうなったらデータベースの構造を見直すべきだけど)
class Item extends AppModel{
var $useDbConfig = 'hoge';
}
こんなカンジで簡単にデータベースの切り替えがCakePHPでは行えます。