WordPress・WEB系の開発(プログラム)関係や技術情報ほか、技術情報全般を掲載

  • このエントリーをはてなブックマークに追加

CakePHP 複数のデータベース設定を環境毎に切り替える方法について

本番用/開発用など条件によってデータベースの切替が必要になることがあります。
考え付く方法としては、下記などが考えられます。

1.DATABASE_CONFIG内の __construct() で切り替える
2.AppModel内の __construct() で切り替える
3.各モデルで「 public $useDbConfig = ‘devdb’; 」と宣言して切り替える

/**
 * app/Config/database.php
 * データベース設定
 */
class DATABASE_CONFIG {

    /**
     * デフォルトのデータベース設定
     */
    public $default = array( );

    /**
     * 1つ目のデータベース設定(本番用)
     */
    public $prod = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host'       => 'localhost',
        'login'      => 'dbuser1',
        'password'   => 'パスワード',
        'database'   => 'データベース1',
        'prefix'     => '',
        'encoding'   => 'utf8',
    );

    /**
     * 2つ目のデータベース設定(開発用)
     */
    public $dev = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host'       => 'localhost',
        'login'      => 'dbuser2',
        'password'   => 'パスワード',
        'database'   => 'データベース2',
        'prefix'     => '',
        'encoding'   => 'utf8',
    );
}
/**
 * ★方法1:DATABASE_CONFIG内の __construct() で切り替える
 * app/Config/database.php
 */
public function __construct()
{
    if (env('SERVER_ADDR') == '127.0.0.1') {
        $this->default = $this->dev;

    } else {
        $this->default = $this->prod;
    }
}
/**
 * ★方法2:AppModel内の __construct() で切り替える
 * app/Model/AppModel.php
 */
function __construct()
{
    if (env('SERVER_ADDR') == '127.0.0.1') {
        $this->useDbConfig = 'dev';
    }  else {
        $this->useDbConfig = 'prod';
    }
}
/**
 * ★方法3:各モデルで「 public $useDbConfig = 'dev'; 」と宣言して切り替える
 * app/Model/Item.php
 */
class Item extends AppModel {
    public $useDbConfig = 'dev';
}

※環境情報:
サーバ・・・CORESERVER
CakePHP・・・CakePHP 2.4.6

関連記事

コメントは利用できません。

アーカイブ