db-migrate
參照Laravel開發(fā)的easyswoole數(shù)據(jù)庫版本遷移工具。
組件要求
- php: >=7.1.0
- easyswoole/command: ^1.1
- easyswoole/component: ^2.0
- easyswoole/ddl: ^1.0
- easyswoole/mysqli: ^2.2
- easyswoole/spl: ^1.0
- easyswoole/utility: ^1.0
安裝方法
composer require easyswoole/db-migrate
倉庫地址
基本使用
在全局 boostrap
事件中注冊 MigrateCommand
并添加配置信息
bootstrap.php
\EasySwoole\Command\CommandManager::getInstance()->addCommand(new \EasySwoole\DatabaseMigrate\MigrateCommand());
$config = new \EasySwoole\DatabaseMigrate\Config\Config();
// 數(shù)據(jù)地址
$config->setHost("127.0.0.1");
// 數(shù)據(jù)庫端口
$config->setPort(3306);
// 數(shù)據(jù)庫用戶名
$config->setUser("root");
// 數(shù)據(jù)庫密碼
$config->setPassword("123456");
// 數(shù)據(jù)庫庫名
$config->setDatabase("easyswoole");
// 數(shù)據(jù)庫超時時長
$config->setTimeout(5.0);
// 數(shù)據(jù)庫字符集
$config->setCharset("utf8mb4");
//===========可選配置修改項,以下參數(shù)均有默認值===========
// 遷移記錄的數(shù)據(jù)庫表名
$config->setMigrateTable("migrations");
// 遷移文件目錄的絕對路徑
$config->setMigratePath(EASYSWOOLE_ROOT . '/Database/Migrates/');
// 遷移模板文件的絕對路徑
$config->setMigrateTemplate(EASYSWOOLE_ROOT . '/vendor/easyswoole/db-migrate/src/Resource/migrate._php');
// 遷移模板類的類名
$config->setMigrateTemplateClassName("MigratorClassName");
// 遷移模板類的表名
$config->setMigrateTemplateTableName("MigratorTableName");
// 遷移模板創(chuàng)建表的模板文件的絕對路徑
$config->setMigrateCreateTemplate(EASYSWOOLE_ROOT . '/vendor/easyswoole/db-migrate/src/Resource/migrate_create._php');
// 遷移模板修改表的模板文件的絕對路徑
$config->setMigrateAlterTemplate(EASYSWOOLE_ROOT . '/vendor/easyswoole/db-migrate/src/Resource/migrate_alter._php');
// 遷移模板刪除表的模板文件的絕對路徑
$config->setMigrateDropTemplate(EASYSWOOLE_ROOT . '/vendor/easyswoole/db-migrate/src/Resource/migrate_drop._php');
// 數(shù)據(jù)填充目錄絕對路徑
$config->setSeederPath(EASYSWOOLE_ROOT . '/Database/Seeds/');
// 數(shù)據(jù)填充模板類的類名
$config->setSeederTemplateClassName("SeederClassName");
// 數(shù)據(jù)填充模板文件的絕對路徑
$config->setSeederTemplate(EASYSWOOLE_ROOT . '/vendor/easyswoole/db-migrate/src/Resource/seeder._php');
// 逆向生成遷移文件的模板文件絕對路徑
$config->setMigrateGenerateTemplate(EASYSWOOLE_ROOT . '/vendor/easyswoole/db-migrate/src/Resource/migrate_generate._php');
// 逆向生成遷移模板SQL語句的DDL代碼塊
$config->setMigrateTemplateDdlSyntax("DDLSyntax");
\EasySwoole\DatabaseMigrate\MigrateManager::getInstance($config);
如果不自定義setMigratePath
、setSeederPath
配置項,所有遷移命令必須在項目根目錄(固定目錄)下執(zhí)行
執(zhí)行 php easyswoole.php migrate -h
php easyswoole.php migrate -h
Database migrate tool
Usage:
easyswoole migrate ACTION [--opts ...]
Actions:
create Create the migration repository
generate Generate migration repository for existing tables
run Run all migrations
rollback Rollback the last database migration
reset Rollback all database migrations
seed Data filling tool
status Show the status of each migration
Options:
-h, --help Get help
create
創(chuàng)建一個遷移模板
當需要新建表、修改表、刪除表時,create命令可以創(chuàng)建一個簡單的遷移模板文件
可用操作選項:
-
--alter
:生成一個用于修改表的遷移模板- 示例:
php easyswoole.php migrate create --alter=TableName
- 示例:
-
--create
:生成一個用于新建表的遷移模板- 示例:
php easyswoole.php migrate create --create=TableName
- 示例:
-
--drop
:生成一個用于刪除表的遷移模板- 示例:
php easyswoole.php migrate create --drop=TableName
- 示例:
-
--table
:生成一個基礎的遷移模板- 示例:
php easyswoole.php migrate create --table=TableName
等同于php easyswoole.php migrate create TableName
- 示例:
操作會在遷移文件目錄生成一個類似文件名為2021_04_08_082914_user.php
的文件,代碼類似如下,對應操作使用的是 easyswoole/ddl 組件方法
<?php
use EasySwoole\DDL\Blueprint\Create\Table as CreateTable;
use EasySwoole\DDL\Blueprint\Alter\Table as AlterTable;
use EasySwoole\DDL\Blueprint\Drop\Table as DropTable;
use EasySwoole\DDL\DDLBuilder;
use EasySwoole\DDL\Enum\Character;
use EasySwoole\DDL\Enum\Engine;
/**
* migrate create
* Class User
*/
class User
{
/**
* migrate run
* @return string
*/
public function up()
{
return DDLBuilder::create('User',function (CreateTable $table){
$table->setIfNotExists(true);
});
}
/**
* migrate rollback
* @return string
*/
public function down()
{
return DDLBuilder::dropIfExists('User');
}
}
generate
對已存在的表生成適配當前遷移工具的遷移模板
對于已經(jīng)啟動的項目沒有做版本遷移,generate命令可以對已存在的表逆向生成遷移文件
對已存在的表生成適配當前遷移工具的遷移模板
可用操作選項:
-
--tables
:指定要生成遷移模板的表,多個表用 ',' 隔開- 示例:
php easyswoole.php migrate generate --tables=table1,table2
- 示例:
-
--ignore
:指定要忽略生成遷移模板的表,多個表用 ',' 隔開- 示例:
php easyswoole.php migrate generate --ignore=table1,table2
- 示例:
run
對所有未遷移的文件執(zhí)行遷移操作
rollback
回滾遷移記錄,默認回滾上一次的遷移,指定操作相關參數(shù)可以從status命令中查看
可用操作選項:
-
--batch
:指定要回滾的批次號- 示例:
php easyswoole.php migrate rollback --batch=2
- 示例:
-
--id
:指定要回滾的遷移ID- 示例:
php easyswoole.php migrate rollback --id=2
- 示例:
reset
根據(jù)遷移表的記錄,一次性回滾所有遷移
seed
數(shù)據(jù)填充工具
不加操作項即為執(zhí)行填充數(shù)據(jù)操作,添加操作項即為創(chuàng)建填充模板
生成模板文件之后,方法內的操作使用 easyswoole/mysqli 做數(shù)據(jù)填充,
可用操作選項:
-
--create
:創(chuàng)建一個數(shù)據(jù)填充模板- 示例:
php easyswoole.php migrate seed --create=UserTable
- 示例:
- 直接填寫文件名或者類名,即為執(zhí)行指定填充文件(多個文件用 ',' 隔開)
- 示例:
php easyswoole.php migrate seed UserTable,UserInfoTable.php
- 示例:
- 直接執(zhí)行seed命令為執(zhí)行數(shù)據(jù)填充目錄下所有填充操作
- 示例:
php easyswoole.php migrate seed
- 示例:
status
遷移狀態(tài)
展示成功遷移的數(shù)據(jù),即為遷移表內的數(shù)據(jù)