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