ขอบคุณข้อมูลดีๆจาก : codeigniter.com onlinewebtutorblog.com , youtube
บางครั้งคุณจำเป็นต้องเชื่อมต่อข้อมูลหลายฐานใน Web App ของคุณ และใน Codeigniter 4 ก็มี feature นี้รองรับไว้อยู่แล้ว สามารถทำได้ง่ายๆ ตามขั้นตอนนี้เลย (ในหัวข้อนี้เรา assume ว่าคุณติดตั้งโปรเจคเรียบร้อยแล้วนะครับ)
ปกติแล้วเราจะ config ค่าฐานข้อมูลไว้ที่ไฟล์ .env
database.default.hostname = localhost
database.default.database = database_name
database.default.username = root
database.default.password = root
database.default.DBDriver = MySQLi
ค่าปกติระบบจะเลือกใช้ object ที่ชื่อ default ซึ่งถูก set ไว้ที่ไฟล์ app/Config/Database.php
public $defaultGroup = 'default';
วิธีโหลด Database Instance มาใช้งาน
มี syntax ให้เลือกใช้ 2 แบบในการเชื่อมต่อฐานข้อมูล คือ
$db = \Config\Database::connect();
สามารถเพิ่ม line นี้ ไปได้ทุก function ที่คุณต้องการ หรือจะเพิ่มใน constructor เพื่อทำให้สามารถเรียกใช้ใน class นั้นๆได้แบบ global
หรือจะใช้..
$db = db_connect();
วิธีนี้จะสะดวกหน่อย เพราะไม่ต้องเขียนให้ยาวเหยียด ซึ่งก็สามารถทำงานได้เหมือนกันกับ line ด้านบน
การเชื่อมต่อฐานแบบ Manual
คุณสามารถกำหนด database group ได้เอง ซึ่งชื่อ database group นั้นจะมาจาก config ไฟล์
$db = \Config\Database::connect('group_name');
เชื่อมต่อแบบหลายฐาน
มีการทำอยู่ 3 ขั้นตอน คือ
#1 เพิ่ม connection group ที่ไฟล์ .env
# DEFAULT connection group
database.default.hostname = localhost
database.default.database = database_name
database.default.username = root
database.default.password = root
database.default.DBDriver = MySQLi
# CUSTOM connection group - testDb
database.testDb.hostname = localhost
database.testDb.database = test_database_name
database.testDb.username = test_user
database.testDb.password = test_password
database.testDb.DBDriver = MySQLi
connection group ที่เราสร้างขึ้นมาเพิ่ม คือ testDb ในส่วนค่า connection ก็กำหนดให้ถูกต้อง (บรรทัดที่มีเครื่องหมาย # คือ comment นะจ๊ะ)
#2 เพิ่ม connection array ที่ไฟล์ Database.php
เปิดไฟล์ app/Config/Database.php และเพิ่ม array ชื่อว่า $testDb เข้าไป
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'cacheOn' => false,
'cacheDir' => '',
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
public $testDb = [
'DSN' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'cacheOn' => false,
'cacheDir' => '',
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
#3 โหลดมาใช้งาน
เราจะทดสอบเรียกใช้ที่ constructor ใน controller
<?php
namespace App\Controllers;
use App\Controllers\BaseController;
class Dashboard extends BaseController
{
private $db1;
private $db2;
public function __construct()
{
$this->db1 = db_connect(); // default database group
$this->db2 = db_connect("testDb"); // other database group
}
}
หรือจะใช้ syntax..
$this->db1 = \Config\Database::connect(); // Loads default group
$this->db2 = \Config\Database::connect("testDb"); // Loads OtherDb group
ทดสอบ Query
ทดสอบ query ที่ไฟล์ model
<?php
namespace App\Models;
use CodeIgniter\Model;
class TestModel extends Model
{
private $db2;
public function __construct() {
parent::__construct();
$this->db2 = db_connect("testDb");
}
public function get_users() {
$sql = "SELECT * FROM users";
return $this->db2->query($sql)->getResult();
}
}
หรือจะไปโหลด database group ที่ model ก็ได้
<?php
namespace App\Models;
use CodeIgniter\Model;
class TestModel extends Model
{
protected $DBGroup = 'testDb';
}
จบจ่ะ
command line ตรวจสอบ spec ใน Windows OS
วิธีผูก วินิจฉัย (Diagnosis) กับ วัคซีน (Vaccine)
ETL ใน Data Engineering คืออะไร?
แก้ปัญหา export ภาษาไทยเพี้ยน ของ MySQL ใน phpMyAdmin
เชื่อมตารางตัวเองใน MySQL ด้วย SELF JOIN
เคล็ดลับเพิ่มประสิทธิภาพการใช้ Google Docs
เทคนิคการใช้ ChatGPT Plus ให้คุ้มค่า คุ้มราคา
เชื่อมหลายฐานข้อมูล MySQL ใน Codeigniter4