Cakephpで複数のデータベースを使用する(切り替えたりする)

設定例

class DATABASE_CONFIG {
/* 本番サーバー */
  var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'ホスト名',
    'login' => 'ユーザー名',
    'password' => 'パスワード',
    'database' => 'DB名',
    'encoding' => 'utf8',
    'prefix' => 'プレフィックス',
  );

/* Local */
  var $localtest = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'ユーザー名',
    'password' => 'パスワード',
    'database' => 'DB名',
    'encoding' => 'utf8',
    'prefix' => 'プレフィックス',
  );
}

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

Controllerの一部変更して使う場合

$this->Model->setDataSource('localtest');	//DB変更
$this->Model->setDataSource('default');		//DBを元に戻す

Modelで一括変更する場合

class Item extends AppModel{
  var $useDbConfig = 'localtest';
}

参考:CakePHP 2.xで動的にDBを切り替える : ああ、Web屋のつれづれ記

Controllerで動的に切り替え

AppModel

class AppModel extends Model {
  public function setDb($dbName,$DbConfig='default') {
    $this->setDataSource($DbConfig);
    $db = ConnectionManager::getDataSource($this->useDbConfig);
    $db->reconnect(array('database' => $dbName));
  }
}

Controller

// 切り替えたいDB名
$dbName = 'test-db';

// Config内のdatabase.phpでセットした接続設定を切り替える。defaultの場合は省略可
$DbConfig = 'localtest';

$this->Model->setDb($dbName,$DbConfig);

参考:cakephpのシステム内で条件によってDBを切り替える | Webエンジニアブログ

ドメインによってDBを切り替える
ドメイン名に「adult-」が含まれる時、「.com」が含まれる時で分ける

AppModel

class AppModel extends Model {
  function __construct() {
    parent::__construct();
    if( strpos(DOMAIN, "adult-") !== false ) {
      $this->useDbConfig = 'localtest';
    } elseif( strpos(DOMAIN, ".com") !== false ) {
      $this->useDbConfig = 'default';
    }
  }
}

別DBのテーブルをJOINしてfind

参考:cakephp で複数のデータベースのテーブルを Join する – me++

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)