国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

數(shù)據(jù)庫

由于大部分插件都會安裝webman-admin,所以建議直接復(fù)用webman-admin的數(shù)據(jù)庫配置。

模型基類使用plugin\admin\app\model\Base則會自動使用webman-admin的數(shù)據(jù)庫配置。

<?php

namespace plugin\foo\app\model;

use plugin\admin\app\model\Base;

class Orders extends Base
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'foo_orders';

    /**
     * The primary key associated with the table.
     *
     * @var string
     */
    protected $primaryKey = 'id';

}

也可以通過plugin.admin.mysql操作webman-admin的數(shù)據(jù)庫,例如

Db::connection('plugin.admin.mysql')->table('user')->first();

使用自己的數(shù)據(jù)庫

插件也可以選擇使用自己的數(shù)據(jù)庫,例如plugin/foo/config/database.php內(nèi)容如下

return  [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [ // mysql為連接名
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => '數(shù)據(jù)庫',
            'username'    => '用戶名',
            'password'    => '密碼',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
        'admin' => [ // admin為連接名
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => '數(shù)據(jù)庫',
            '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();

如果想使用主項(xiàng)目的數(shù)據(jù)庫,則直接使用即可,例如

use support\Db;
Db::table('user')->first();
// 假設(shè)主項(xiàng)目還配置了一個(gè)admin連接
Db::connection('admin')->table('admin')->first();

給Model配置數(shù)據(jù)庫

我們可以為Model創(chuàng)建一個(gè)Base類,Base類用$connection指定插件自己的數(shù)據(jù)庫連接,例如

<?php

namespace plugin\foo\app\model;

use DateTimeInterface;
use support\Model;

class Base extends Model
{
    /**
     * @var string
     */
    protected $connection = 'plugin.foo.mysql';

}

這樣插件里所有的Model繼承自Base,就自動使用了插件自己的數(shù)據(jù)庫。

自動導(dǎo)入數(shù)據(jù)庫

運(yùn)行 php webman app-plugin:create foo 會自動創(chuàng)建foo插件,其中包含 plugin/foo/api/Install.phpplugin/foo/install.sql

提示
如果沒有生成install.sql文件請嘗試升級webman/console,命令為composer require webman/console ^1.3.6

插件安裝時(shí)導(dǎo)入數(shù)據(jù)庫

安裝插件時(shí)會執(zhí)行Install.php里的install方法,該方法會自動導(dǎo)入install.sql里的sql語句,從而實(shí)現(xiàn)自動導(dǎo)入數(shù)據(jù)庫表的目的。

install.sql文件內(nèi)容是創(chuàng)建數(shù)據(jù)庫表以及對表歷史修改sql語句,注意每個(gè)語句必須用;結(jié)束,例如

CREATE TABLE `foo_orders` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `order_id` varchar(50) NOT NULL COMMENT '訂單id',
  `user_id` int NOT NULL COMMENT '用戶id',
  `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 '價(jià)格',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='商品';

更改數(shù)據(jù)庫連接

install.sql導(dǎo)入的目標(biāo)數(shù)據(jù)庫默認(rèn)為webman-admin的數(shù)據(jù)庫,如果想導(dǎo)入到其它數(shù)據(jù)庫,可以修改Install.php里的$connection屬性,例如

<?php

class Install
{
    // 指定插件自己的數(shù)據(jù)庫
    protected static $connection = 'plugin.admin.mysql';

    // ...
}

測試

執(zhí)行php webman app-plugin:install foo安裝插件,然后查看數(shù)據(jù)庫,會發(fā)現(xiàn)foo_ordersfoo_goods表已經(jīng)創(chuàng)建了。

插件升級時(shí)更改表結(jié)構(gòu)

有時(shí)候插件升級需要新建表或更改表結(jié)構(gòu),可以直接在install.sql后面追加對應(yīng)的語句即可,注意每個(gè)語句后面用;結(jié)束,例如追加一個(gè)foo_user表以及給foo_orders表增加一個(gè)status字段

CREATE TABLE `foo_orders` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `order_id` varchar(50) NOT NULL COMMENT '訂單id',
  `user_id` int NOT NULL COMMENT '用戶id',
  `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 '價(jià)格',
 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 '狀態(tài)';

升級時(shí)會執(zhí)行Install.php里的update方法,該方法同樣會執(zhí)行install.sql里的語句,如果有新的語句會執(zhí)行新的語句,如果是舊的語句會跳過,從而實(shí)現(xiàn)升級對數(shù)據(jù)庫的修改。

卸載插件時(shí)刪除數(shù)據(jù)庫

卸載插件時(shí)Install.phpuninstall方法會被調(diào)用,它會自動分析install.sql里有哪些建表語句,并自動刪除這些表,達(dá)到卸載插件時(shí)刪除數(shù)據(jù)庫表的目的。
如果想卸載時(shí)只想執(zhí)行自己的uninstall.sql,不執(zhí)行自動的刪表操作,則只需要?jiǎng)?chuàng)建plugin/插件名/uninstall.sql即可,這樣uninstall方法只會執(zhí)行uninstall.sql文件里的語句。

編輯于2024-04-10 16:22:06 完善本頁 +發(fā)起討論
贊助商