Codeigniter วิธีโหลดไฟล์ config เพื่อเชื่อมต่อฐานข้อมูลหลายๆตัว ตามค่าที่ผู้ใช้งานส่งมา

โดย CyberMAN

How to switch dynamic DATABASE  in Codeigniter?

ตัวอย่างการโหลดค่า config ของฐานข้อมูลเดิม เพื่อนำมาเชื่อมต่อใหม่ด้วยชื่อฐานข้อมูลใหม่ที่ต้องการ
$this->config->load("new_database");
$db_config = $this->config->item('new_db');

echo '<pre>';
print_r($db_config);
echo '</pre>';
ผลลัพธ์ที่ได้ จะเหมือนกับค่าใน application/config/database.php



มาดูตัวอย่างการสร้างไฟล์คอนฟิกใหม่สำหรับเรียกใช้ Dynamic Database ใน CodeIgniter

application/config/new_database.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

include(APPPATH. '/config/database.php');
$config['new_db'] = $db['default'];

โค้ดด้านบนนี้จะมีการ include ไฟล์คอนฟิกหลักมา และเซ็ตเข้าไปในตัวแปร $config['new_db']

ในส่วนของเปลี่ยนฐานข้อมูลเราจะแทรกใน __construct() ของไฟล์ Controller 

โดยที่คำสั่ง $this->load->database($db_config, TRUE); คือการเชื่อมต่อฐานข้อมูลอีกครั้งด้วยค่าคอนฟิกใหม่ที่โหลดเก็บไว้ใน $db_config และจะเปลี่ยนชื่อฐานข้อมูลทุกครั้งตามค่า SESSION ที่ส่งเข้ามาในตัวแปร $session_new_db
<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Dashboard extends MY_Controller {

    public function __construct() {
        parent::__construct();
      
      
        $this->config->load("new_database");
        $db_config = $this->config->item('new_db');
        $session_new_db = $this->session->userdata('session_new_db');
        if($session_new_db != ''){
            $db_config['database'] = $session_new_db;
            $this->db = $this->load->database($db_config, TRUE);
        }
    }

    public function index() {
        $tables = $this->db->list_tables();
        echo '<pre>';
        print_r($tables);
        echo '</pre>';
    }
  
}

// ------ END Controller Class ------


ผลลัพธ์ที่ได้เมื่อสั่งแสดงรายชื่อตารางทั้งหมดของ Database




มาดูการโหลดคอนฟิกอื่นๆ มาใช้กันบ้าง กรณีไม่ได้สร้างคอนฟิกที่เป็นอาร์เรย์หลายมิติแบบ [new_db][xxx]


$prev_config = $this->config->config;
$this->config->load("pagination");
$config = $this->config->config;

echo '<pre>';
print_r($config );
echo '</pre>';

สังเกตว่าผลลัพธ์จะได้ค่า config รวมกันทั้งหมด




ดังนั้นเราจะต้องทำการคัดค่าเดิมออกไป เอาเฉพาะค่าคอนฟิกใหม่
$result = array_diff_key($config, $prev_config);
echo '<pre>';
print_r($result);
echo '</pre>';

จะได้ผลลัพธ์ที่คัดค่าคอนฟิกเดิมออกไปแล้วดังนี้


สรุป


ถ้าจะสร้างไฟล์ config ให้สร้างเป็นอาร์เรย์หลายมิติ เพื่อเรียกใช้จะได้ง่ายต่อการ load แบบวิธีเชื่อมต่อฐานข้อมูลหลายตัว ดังที่ได้แนะนำไว้

$this->config->load("your_config_file");
$db_config = $this->config->item('your_config_array');




:: ฟังก์ชั่นที่เกี่ยวข้อง ::

คัดเฉพาะอาร์เรย์ที่ไม่ซ้ำกัน (ต้องการเฉพาะ Config ค่าใหม่ที่โหลดเข้ามาเท่านั้น)
http://php.net/manual/en/function.array-diff-key.php

วิธีโหลด config ของ CodeIgniter มาใช้งาน
https://www.codeigniter.com/userguide3/libraries/config.html

แสดงรายชื่อตารางทั้งหมดด้วยฟังก์ชั่น list_tables()
https://www.codeigniter.com/user_guide/database/metadata.html

วิธี include ไฟล์ config มาใช้งาน
https://www.sitepoint.com/community/t/basepath-apppath/3613/4



PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/