ちょっと規模が大きいサイトだとDBを分割したり、マスタースレイブ構成にするときに複数DBを利用する必要が出てきます。
今回はCodeIgniter3を複数DBに対応させる方法を紹介します。
目次
設定
環境
- PHP 5.6.30
- CodeIgniter 3.1.5
- CentOS 6.8
- MySQL5.7
CodeIgniterの設定
/application/config/databse.phpを開いて$db[‘master’]配列を追加します。
// デフォルトDB設定
$db['default'] = array(
//省略
);
// テストDB設定
$db['test'] = array(
//省略
);
データベース(MySQL)の設定
MySQLでデフォルトDBとテストDBを作成してください。
デフォルトDBに以下のSQLを実行してください。
CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `title` varchar(100) NOT NULL COMMENT 'タイトル', PRIMARY KEY (id) ); INSERT INTO `demo` (`id`, `title`) VALUES (1, 'デフォルトDB1'), (2, 'デフォルトDB2');
テストDBに以下のSQLを実行してください。
CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `title` varchar(100) NOT NULL COMMENT 'タイトル', PRIMARY KEY (id) ); INSERT INTO `demo` (`id`, `title`) VALUES (1, 'テストDB1'), (2, 'テストDB2');
コントローラーに直接SQL文を書く場合
コントローラーを作る
/application/controllersにTest.phpを作る。
class Test extends CI_Controller
{
public function index()
{
// デフォルトDBのインスタンスを作る
$defaultDB = $this->load->database('default', true);
$res = $defaultDB->query('SELECT * FROM demo');
print_r($res->result_array());
// テストDBのインスタンスを作る
$testDB = $this->load->database('test', true);
$res = $testDB->query('SELECT * FROM demo');
print_r($res->result_array());
}
}
ルーティングを設定する
/application/config/route.phpにルーティングを追加してください。
$route['test'] = 'test/index';
http://アドレス/testにアクセスするとデフォルトDBとテストDBのデータが表示されます。
モデルでSQL文を実行する場合
モデルを作る
/application/modelsにDemo_model.phpを作る。
class Demo_model extends CI_Model
{
public function getDefault()
{
// デフォルトDBのインスタンスを作る
$defaultDB = $this->load->database('default', true);
$res = $defaultDB->query('SELECT * FROM demo');
print_r($res->result_array());
}
public function getTest()
{
// テストDBのインスタンスを作る
$testDB = $this->load->database('test', true);
$res = $testDB->query('SELECT * FROM demo');
print_r($res->result_array());
}
}
コントローラーを作る
コントローラーに直接SQL文を書く場合で作ったTest.phpのindex()内を書き換えます。
class Test extends CI_Controller
{
public function index()
{
$this->load->model('demo_model');
// デフォルトDBのデータ
$this->demo_model->getDefault();
// テストDBのデータ
$this->demo_model->getTest();
}
}
http://アドレス/testにアクセスするとデフォルトDBとテストDBのデータが表示されます。
