CodeIgniterでDatabaseの切り替え接続

CodeIgneiterで処理内容によって複数のDBに切り替えて処理したい場合のメモ。
前提としてController毎でDBの接続を切り替えるようにする。
要は、コントローラー名でmoduleの初期化のタイミングで接続先を切り替える。

①application/config/database.phpにDBの設定を行う。
初期の状態では「default」という名前で設定されているが、そこに任意の名前で切り替えたいDBの設定を記述。

$active_group = 'default';    //設定名
$active_record = TRUE;
/*///////デフォルトで設定(用意)されているDB設定//////*/
$db['default']['hostname'] = 'p:localhost'; //`mysqli`ドライバー利用時には「hosntame」の設定でサーバのアドレスの前に「p:」を付ける
$db['default']['username'] = 'root';
$db['default']['password'] = 'root';
 
/*///////省略、//////*/

/*///////追加したいDB設定 とりあえずdb2という名前で設定//////*/
$db['db2']['hostname'] = 'p:localhost'; 
$db['db2']['username'] = 'root';
$db['db2']['password'] = 'root';
$db['db2']['database'] = 'hoge_database';
$db['db2']['dbdriver'] = 'mysqli';
$db['db2']['dbprefix'] = '';
$db['db2']['pconnect'] = TRUE;
$db['db2']['db_debug'] = TRUE;  //TRUEを指定すると、データベースエラーが発生した際に処理を停止させ、ブラウザに エラーメッセージを表示
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = '';
$db['db2']['char_set'] = 'utf8';
$db['db2']['dbcollat'] = 'utf8_general_ci';
$db['db2']['swap_pre'] = '';
$db['db2']['autoinit'] = TRUE;  //データベースインスタンスがロードされるタイミングで データベースに接続する
$db['db2']['stricton'] = FALSE; //データをセットする際の自動型変換

 ②moduleの設定。
いろいろ使いまわしたいので基底のModuleクラスとしてapplication/coreにMY_Modelを設置

class MY_Model extends CI_Model {

    /**
     * constructor
     */
    public function __construct() {
        parent::__construct();
                  //controller名取得
        $controller_name = $this->router->fetch_class();
                  /*
                  * controllerがhogeコントローラーの場合はdb2に接続
                  * それ以外はdefault設定のDBに接続
                 */
        if($controller_name == "article" ){
                 $db_name = 'db2';
        } else {
                $db_name = 'default';
        }
                  //DB接続
        $this->load->database($db_name);
    }

  /*//////以下、諸々の処理////////*/
}

 

 

[`evernote` not found]
Pocket
[`yahoo` not found]