アーカイブ : 2014年 5月

CakePHPでデータベースの接続を切り替える方法

WEBシステムを開発していると、違うデータベースを

読みたいということがあると思います。

事前準備として、データベース接続情報を

Config/database.php に設定しておきます。

var $default = array(
  'driver' => 'mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'hogeid',
  'password' => 'hogepass',
  'database' => 'hogedb',
  'encoding' => 'utf8',
  'prefix' => '',
);

var $puyo = array(
  'driver' => 'mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'puyoid',
  'password' => 'puyopass',
  'database' => 'puyodb',
  'encoding' => 'utf8',
  'prefix' => '',
);

特に設定していない場合は「$default」で設定したDBを読み込みます。

コントローラーで切り替えを行う場合は、以下のようにします。

$this->Model->setDataSource('puyo');

特定の処理のみで取得したい場合は、find等データベース処理の直前に書きます。

処理が終わった後、元に戻したい場合は以下を書きます。

$this->Model->setDataSource('default');

今回はコントローラー全体で使用したかったので、beforeFilter内に書きました。

function beforeFilter() {
  parent::beforeFilter();
  $this->User->setDataSource('puyo');
}

(puyoデータベースをUserモデルで読む場合)

このような場合は、モデルに設定する方法もアリです。

class User extends AppModel{
  var $useDbConfig = 'puyo';
}

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