ขอบคุณข้อมูลดีๆจาก : 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';
}
จบจ่ะ
ขั้นตอนการติดตั้ง Vuetify ใน Laravel
3 เทคนิค เพิ่มความเร็วใน Laravel
ฟังก์ชันวันเวลาที่น่าสนใจใน MySQL
เคล็ดลับการเรียงลำดับข้อมูลใน MySQL
เชื่อมตารางตัวเองใน MySQL ด้วย SELF JOIN
เคล็ดลับเพิ่มประสิทธิภาพการใช้ Google Docs
เทคนิคการใช้ ChatGPT Plus ให้คุ้มค่า คุ้มราคา
เชื่อมหลายฐานข้อมูล MySQL ใน Codeigniter4