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

ITかあさん

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