CakePHP でアクセスする DB を切り替える場合は、Model::useDbConfig の値を変えれば良い。
変更する値は、config/database.php に書いてある。
開発と本番でソースが同一の場合、データベースを自動的に切り分ける場合は、何らかの形で動的に判断して、値を書き換える必要がある。
今回実際に出遭ったケースでは、ディレクトリが判別の鍵として使えるので、
config/bootstrap.php 中で、
config('constants');
として読み込ませている定数定義ファイル config/constants.php の中で、
if ( strstr(dirname(__FILE__), 'master') ) { $testFlag=false; } else { $testFlag=true; }
として、今いる場所のパス文字列に master という文字があるかどうかで判別させている。
これを利用して、
if ( $testFlag ) {
define('USE_SYSTEM', 'master');
else {
define('USE_SYSTEM', 'test');
}
と定数を宣言させる。
んで、あとは AppModel (app_model.php) の中で、
function __construct() {
parent::__construct();
if ( USE_SYSTEM == 'master' ) { $this->useDbConfig = 'default'; }
else { $this->useDbConfig = 'test'; }
}
として、利用 DB を切り替えている。
環境を判別する方法は、運用/開発環境によっていろいろあると思うが、いったん判別できてしまえば、app_model.php 中で切り替えられる。
変更する値は、config/database.php に書いてある。
開発と本番でソースが同一の場合、データベースを自動的に切り分ける場合は、何らかの形で動的に判断して、値を書き換える必要がある。
今回実際に出遭ったケースでは、ディレクトリが判別の鍵として使えるので、
config/bootstrap.php 中で、
config('constants');
として読み込ませている定数定義ファイル config/constants.php の中で、
if ( strstr(dirname(__FILE__), 'master') ) { $testFlag=false; } else { $testFlag=true; }
として、今いる場所のパス文字列に master という文字があるかどうかで判別させている。
これを利用して、
if ( $testFlag ) {
define('USE_SYSTEM', 'master');
else {
define('USE_SYSTEM', 'test');
}
と定数を宣言させる。
んで、あとは AppModel (app_model.php) の中で、
function __construct() {
parent::__construct();
if ( USE_SYSTEM == 'master' ) { $this->useDbConfig = 'default'; }
else { $this->useDbConfig = 'test'; }
}
として、利用 DB を切り替えている。
環境を判別する方法は、運用/開発環境によっていろいろあると思うが、いったん判別できてしまえば、app_model.php 中で切り替えられる。