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では行えます。