設定例
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
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)