maxim-oleinik / blade-migrations
PHP应用的原生SQL数据库迁移工具
0.2.4
2022-05-29 15:40 UTC
Requires
- php: >=7.0
- maxim-oleinik/blade-database: ^0.3.0
- psr/log: ~1.0
- symfony/finder: >=2.0
Requires (Dev)
- phpunit/phpunit: >=6.0
README
rus /
此库提供数据库结构操作命令,请参阅实现
- Symfony/Console - https://github.com/maxim-oleinik/blade-migrations-symfony
- Laravel/Artisan - https://github.com/maxim-oleinik/blade-migrations-laravel
功能
- 使用原生SQL查询
- 可以使用数据库的所有功能来描述结构和更改
- 轻松处理存储过程和函数
- 安全数据迁移(INSERT/UPDATE)
- 支持IDE原生语法
- 在事务中运行迁移,在发生错误时自动回滚(如果您的数据库支持,例如PostgreSQL)
- 动态输出运行SQL查询
- 在切换分支后自动回滚(用于审查、测试、演示、在永久/测试数据库中构建)
- 编辑后自动更新迁移(迁移文件名称中的版本更改)
- 应用并回滚测试 -
UD-DOWN-UP - 回滚或重新加载任何选定的迁移
语法
--TRANSACTION- 如果指定,迁移将在事务中启动- 指令由
--UP和--DOWN标签分隔。 - SQL查询由
";"分隔(行尾的最后一个字符)
--TRANSACTION
--UP
ALTER TABLE authors ADD COLUMN code INT;
ALTER TABLE posts ADD COLUMN slug TEXT;
--DOWN
ALTER TABLE authors DROP COLUMN code;
ALTER TABLE posts DROP COLUMN slug;
如果您需要更改分隔符(当在SQL中必须使用";"时)
--SEPARATOR=@
--UP
... some sql ...@
... some sql ...@
--DOWN
... some sql ...@
... some sql ...@
安装
-
Composer
composer require maxim-oleinik/blade-migrations -
实现
\Blade\Database\DbConnectionInterface以连接到您的数据库,请参阅https://github.com/maxim-oleinik/blade-database -
设置
$conn = new MyDbConnection; // implements \Blade\Database\DbConnectionInterface $dbAdapter = new \Blade\Database\DbAdapter($conn); $repoDb = new \Blade\Migrations\Repository\DbRepository($migrationTableName = 'migrations', $dbAdapter); $repoFile = new \Blade\Migrations\Repository\FileRepository($migrationsDir = __DIR__ . '/migrations'); $service = new \Blade\Migrations\MigrationService($repoFile, $repoDb);
命令
状态 - \Blade\Migrations\Operation\StatusOperation
$op = new \Blade\Migrations\Operation\StatusOperation($service);
$data = $op->getData();
返回包含当前迁移状态的数组
[
[
CODE,
ID,
DATE,
NAME,
],
]
其中CODE是
- Y - 已应用迁移
- D - 需要回滚(当前分支/修订中没有此迁移)
- A - 尚未应用,将下次运行
迁移 - \Blade\Migrations\Operation\MigrateOperation
$op = new \Blade\Migrations\Operation\MigrateOperation($service);
// Set logger for output
$op->setLogger(\Psr\Log\LoggerInterface $logger);
$op->setAuto(bool); // Auto-migrate all - rollback all D-migrations and appply all А-migrations
$op->setForce(bool); // Apply the migration without a prompt
$op->setTestRollback(bool); // rollback testing: UP-DOWN-UP
/**
* @param $confirmationCallback - Function, which asks for a prompt and returns true/false
* @param $migrationName - Concrete migration name
*/
$op->run(callable $confirmationCallback($migrationTitle), $migrationName = null);
回滚 - \Blade\Migrations\Operation\RollbackOperation
$op = new \Blade\Migrations\Operation\RollbackOperation($service);
// Set logger for output
$op->setLogger(\Psr\Log\LoggerInterface $logger);
$op->setForce(bool);
/**
* @param $confirmationCallback - Function, which asks for a prompt and returns true/false
* @param $migrationId - Database migration ID
* @param $loadFromFile - Rollback migration with commands taken from migration file, not from DB (if saved version contains error)
*/
$op->run(callable $confirmationCallback($migrationTitle), $migrationId = null, $loadFromFile = false);
创建迁移文件 - \Blade\Migrations\Operation\MakeOperation
$op = new \Blade\Migrations\Operation\MakeOperation($repoFile)
$op->run($migrationFileName);
安装 - \Blade\Migrations\Repository\DbRepository
创建迁移表
$repoDb->install();