はじめに
ローカル、ステージング、本番などの環境があって、それぞれ異なるDBに接続する場合があると思います。
今回はホスト名を見て、動的に接続するDBを変更する方法をご紹介します。
接続するDBを動的に変更する方法
コード
”app/Config/databas.php”
を下記のように変更することで動的に接続先を変更できます。
<?php class DATABASE_CONFIG {
// ローカル環境
public $default = array(
'datasource' =>'Database/Mysql',
'persistent' =>'false',
'host' =>'db_host',
'login' =>'user',
'password' =>'password',
'database' =>'database_name',
'schema' =>'public',
'prefix' =>'',
'encoding' =>'utf8'
);
// staging環境
public $staging = array(
'datasource' =>'Database/Mysql',
'persistent' =>'false',
'host' =>'db_host',
'login' =>'user',
'password' =>'password',
'database' =>'database_name',
'schema' =>'public',
'prefix' =>'',
'encoding' =>'utf8'
);
// 本番環境
public $production = array(
'datasource' =>'Database/Mysql',
'persistent' =>'false',
'host' =>'da_host',
'login' =>'user',
'password' =>'password',
'database' =>'database_name',
'schema' =>'public',
'prefix' =>'',
'encoding' =>'utf8'
);
// ドメインごとにDBを切り替え
public function __construct() {
switch (env('HTTP_HOST')) {
case 'localhost':
$this->default =$this->default;
break;
case 'staging.xxxx.jp':
$this->default =$this->staging;
break;
case 'production.xxxx.jp':
$this->default =$this->production;
break;
}
}
}
コードの解説
ローカル環境(”$default”
)、ステージング環境(”$staging”
)、本番環境(”$production”
)のDB接続情報をそれぞれ定義します。
動的に切り替えない場合は、常に$default
が読み込まれます。
動的に切り替えるために、コンストラクタ(”__construct”
)を使います。
コンストラクタは、新しいオブジェクトが生成されるたびに、このメソッドがコールされます。
そのため、オブジェクトを使用する際の初期化を行うことができます。
(参照: コンストラクタとデストラクタ)
今回はホスト(”env('HTTP_HOST')”
)で動的に切り替えるので、
ホストの値を見て、”$default”
を
ローカル -> ”$default”
ステージング -> ”$staging”
本番 -> "$production”
に変更されるようにしています。
コメント