ちょっと規模が大きいサイトだと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のデータが表示されます。