maxim-oleinik/blade-migrations

PHP应用的原生SQL数据库迁移工具

0.2.4 2022-05-29 15:40 UTC

This package is auto-updated.

Last update: 2024-09-29 05:02:09 UTC


README

rus / 最新稳定版本 总下载量 许可证

此库提供数据库结构操作命令,请参阅实现

功能

  • 使用原生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 ...@

安装

  1. Composer

        composer require maxim-oleinik/blade-migrations
    
  2. 实现\Blade\Database\DbConnectionInterface以连接到您的数据库,请参阅https://github.com/maxim-oleinik/blade-database

  3. 设置

        $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();