ฐานข้อมูล
เนื่องจากปลั๊กอินส่วนใหญ่จะติดตั้ง webman-admin ดังนั้นจึงแนะนำให้ใช้การตั้งค่าฐานข้อมูลของ webman-admin
โดยตรง
คลาสฐานโมเดลใช้ plugin\admin\app\model\Base
จะใช้การตั้งค่าฐานข้อมูลของ webman-admin
โดยอัตโนมัติ
<?php
namespace plugin\foo\app\model;
use plugin\admin\app\model\Base;
class Orders extends Base
{
/**
* ตารางที่เชื่อมโยงกับโมเดล
*
* @var string
*/
protected $table = 'foo_orders';
/**
* รหัสหลักที่เชื่อมโยงกับตาราง
*
* @var string
*/
protected $primaryKey = 'id';
}
ยังสามารถใช้ plugin.admin.mysql
เพื่อดำเนินการฐานข้อมูลของ webman-admin
ได้ เช่น
Db::connection('plugin.admin.mysql')->table('user')->first();
การใช้ฐานข้อมูลของตนเอง
ปลั๊กอินยังสามารถเลือกใช้ฐานข้อมูลของตนเองได้ เช่นเนื้อหาของ plugin/foo/config/database.php
มีดังนี้
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql เป็นชื่อการเชื่อมต่อ
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'ฐานข้อมูล',
'username' => 'ชื่อผู้ใช้',
'password' => 'รหัสผ่าน',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin เป็นชื่อการเชื่อมต่อ
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'ฐานข้อมูล',
'username' => 'ชื่อผู้ใช้',
'password' => 'รหัสผ่าน',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
การอ้างอิงจะเป็น Db::connection('plugin.{ปลั๊กอิน}.{ชื่อการเชื่อมต่อ}');
เช่น
use support\Db;
Db::connection('plugin.foo.mysql')->table('user')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();
ถ้าต้องการใช้ฐานข้อมูลของโปรเจกต์หลักก็สามารถใช้ได้โดยตรง เช่น
use support\Db;
Db::table('user')->first();
// สมมติว่าโปรเจกต์หลักยังได้ตั้งค่าการเชื่อมต่อ admin ไว้
Db::connection('admin')->table('admin')->first();
การตั้งค่าฐานข้อมูลให้กับ Model
เราสามารถสร้างคลาส Base สำหรับ Model ซึ่งคลาส Base จะใช้ $connection
เพื่อระบุการเชื่อมต่อฐานข้อมูลของปลั๊กอิน เช่น
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
ดังนั้นโมเดลทั้งหมดในปลั๊กอินที่สืบทอดมาจาก Base ก็จะใช้ฐานข้อมูลของปลั๊กอินโดยอัตโนมัติ
การนำเข้าฐานข้อมูลโดยอัตโนมัติ
การรัน php webman app-plugin:create foo
จะสร้างปลั๊กอิน foo อัตโนมัติ ซึ่งจะประกอบด้วย plugin/foo/api/Install.php
และ plugin/foo/install.sql
提示
หากไม่มีการสร้างไฟล์ install.sql ให้ลองอัปเกรดwebman/console
คำสั่งคือcomposer require webman/console ^1.3.6
การนำเข้าฐานข้อมูลเมื่อปลั๊กอินติดตั้ง
เมื่อทำการติดตั้งปลั๊กอิน จะดำเนินการเรียกใช้เมธอด install
ในไฟล์ Install.php ซึ่งเมธอดนี้จะนำเข้า SQL คำสั่งจาก install.sql
โดยอัตโนมัติเพื่อให้ได้ตารางฐานข้อมูล
เนื้อหาของไฟล์ install.sql
คือการสร้างตารางฐานข้อมูลและคำสั่ง SQL ที่เกี่ยวข้องกับการปรับเปลี่ยนประวัติของตาราง โดยต้อง注意ว่าคำสั่งแต่ละคำสั่งจะต้องลงท้ายด้วย ;
เช่น
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'รหัสหลัก',
`order_id` varchar(50) NOT NULL COMMENT 'รหัสคำสั่งซื้อ',
`user_id` int NOT NULL COMMENT 'รหัสผู้ใช้',
`total_amount` decimal(10,2) NOT NULL COMMENT 'จำนวนเงินที่ต้องชำระ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='คำสั่งซื้อ';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'รหัสหลัก',
`name` varchar(50) NOT NULL COMMENT 'ชื่อ',
`price` int NOT NULL COMMENT 'ราคา',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='สินค้า';
การเปลี่ยนการเชื่อมต่อฐานข้อมูล
การนำเข้าจาก install.sql
โดยเริ่มต้นจะตั้งเป้าหมายฐานข้อมูลเป็นฐานข้อมูล webman-admin
หากต้องการนำเข้าไปยังฐานข้อมูลอื่น สามารถเปลี่ยนแปลงค่า $connection
ใน Install.php
ได้ เช่น
<?php
class Install
{
// ระบุฐานข้อมูลของปลั๊กอิน
protected static $connection = 'plugin.admin.mysql';
// ...
}
การทดสอบ
รัน php webman app-plugin:install foo
เพื่อติดตั้งปลั๊กอิน จากนั้นตรวจสอบฐานข้อมูล จะพบว่าตาราง foo_orders
และ foo_goods
ถูกสร้างขึ้นแล้ว
การเปลี่ยนโครงสร้างตารางเมื่ออัปเกรดปลั๊กอิน
บางครั้งการอัปเกรดปลั๊กอินจำเป็นต้องสร้างตารางใหม่หรือเปลี่ยนแปลงโครงสร้างตาราง สามารถเพิ่มคำสั่งที่สัมพันธ์ได้ใน install.sql
โดยต้องระวังว่าคำสั่งแต่ละคำสั่งจะต้องลงท้ายด้วย ;
เช่น การเพิ่มตาราง foo_user
และการเพิ่มฟิลด์ status
ลงในตาราง foo_orders
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'รหัสหลัก',
`order_id` varchar(50) NOT NULL COMMENT 'รหัสคำสั่งซื้อ',
`user_id` int NOT NULL COMMENT 'รหัสผู้ใช้',
`total_amount` decimal(10,2) NOT NULL COMMENT 'จำนวนเงินที่ต้องชำระ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='คำสั่งซื้อ';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'รหัสหลัก',
`name` varchar(50) NOT NULL COMMENT 'ชื่อ',
`price` int NOT NULL COMMENT 'ราคา',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='สินค้า';
CREATE TABLE `foo_user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'รหัสหลัก',
`name` varchar(50) NOT NULL COMMENT 'ชื่อ'
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='ผู้ใช้';
ALTER TABLE `foo_orders` ADD `status` tinyint NOT NULL DEFAULT 0 COMMENT 'สถานะ';
เมื่ออัปเกรดจะดำเนินการเรียกใช้เมธอด update
ใน Install.php
ซึ่งจะทำการexecute คำสั่งจาก install.sql
หากมีคำสั่งใหม่จะทำการexecute คำสั่งใหม่ ถ้าเป็นคำสั่งเก่าจะข้ามไปเพื่อให้การอัปเกรดแก้ไขฐานข้อมูลได้
การลบฐานข้อมูลเมื่อยกเลิกการติดตั้งปลั๊กอิน
เมื่อทำการยกเลิกการติดตั้งปลั๊กอิน เมธอด uninstall
ใน Install.php
จะถูกเรียกใช้งาน ซึ่งจะวิเคราะห์อย่างอัตโนมัติว่ามีคำสั่งสร้างตารางใน install.sql
อะไรบ้างและจะทำการลบตารางเหล่านั้นโดยอัตโนมัติ เพื่อให้เมื่อยกเลิกการติดตั้งปลั๊กอินจะลบตารางในฐานข้อมูลออก
หากต้องการให้การยกเลิกการติดตั้งดำเนินการเฉพาะคำสั่งใน uninstall.sql
ของตนเองเท่านั้น ไม่ทำการลบตารางอัตโนมัติ สามารถสร้างไฟล์ plugin/{ชื่อปลั๊กอิน}/uninstall.sql
ได้เลย ซึ่งเมธอด uninstall
จะทำการexecute เฉพาะคำสั่งในไฟล์ uninstall.sql
เท่านั้น