قاعدة البيانات
نظرًا لأن معظم الإضافات ستقوم بتثبيت webman-admin، يُنصح بإعادة استخدام إعدادات قاعدة البيانات الخاصة بـ webman-admin
مباشرة.
سيتم استخدام إعدادات قاعدة بيانات webman-admin
تلقائيًا عند استخدام نموذج قاعدة البيانات plugin\admin\app\model\Base
.
<?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();
تكوين قاعدة البيانات للنموذج
يمكننا إنشاء فئة Base للنموذج، حيث تستخدم الفئة 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، وستقوم هذه الطريقة أيضًا بتنفيذ تعليمات SQL الموجودة في install.sql
، وإذا كانت هناك أوامر جديدة سيتم تنفيذها، وإذا كانت الأوامر قديمة سيتم تخطيها، مما يحقق التعديل على قاعدة البيانات عند الترقية.
حذف قاعدة البيانات عند إلغاء تثبيت الإضافة
عند إلغاء تثبيت الإضافة، ستتم استدعاء طريقة uninstall
في Install.php
، وستقوم بتحليل تلقائي للأوامر المتعلقة بإنشاء الجداول في install.sql
، وإزالة هذه الجداول تلقائيًا، وبهذا يتم حذف جداول قاعدة البيانات عند إلغاء تثبيت الإضافة.
إذا كنت ترغب في استدعاء uninstall.sql
الخاص بك فقط عند الإلغاء، دون تنفيذ عملية حذف الجداول التلقائية، فقط قم بإنشاء ملف plugin/{اسم الإضافة}/uninstall.sql
، وبالتالي ستقوم طريقة uninstall
بتنفيذ الأوامر الموجودة فقط في ملف uninstall.sql
.