【CakePHP】 DBの接続先を環境ごとに切り替える方法

cakephp エンジニア
記事内に広告が含まれています。

はじめに

ローカル、ステージング、本番などの環境があって、それぞれ異なる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”

に変更されるようにしています。

 

コメント