maxim-oleinik/blade-migrations-symfony

Symfony 控制台命令用于 Blade/Migrations

0.2.0 2018-10-27 12:48 UTC

This package is auto-updated.

Last update: 2024-09-28 01:54:42 UTC


README

Latest Stable Version

一组用于 Symfony Console 的控制台命令,使用当前数据库连接在你的 Symfony 项目中。
查看 https://github.com/maxim-oleinik/blade-migrations

安装和配置

  1. composer 中添加

        composer require maxim-oleinik/blade-migrations-symfony
    
  2. 创建可执行的命令行脚本(如果尚未创建)
    查看 https://symfony.com.cn/doc/current/components/console.html#creating-a-console-application

        cli.php
        -------
        #!/usr/bin/env php
        <?php
            require __DIR__.'/vendor/autoload.php';
            use Symfony\Component\Console\Application;
            
            $application = new Application();
            
            // ... register commands
            $application->run();
    
  3. 命令和它们的注册方案

        // Подключение к БД
        $conn      = new MyDbConnection; // implements \Blade\Database\DbConnectionInterface
        // $conn = new \Blade\Database\Connection\PostgresConnection($connectionString);
        // $conn = new \Blade\Database\Connection\MysqlConnection($host, $user, $pass, $dbName, $port);
        // $conn = new \Blade\Database\Connection\PdoConnection($dsn, $user, $pass);
        см. https://github.com/maxim-oleinik/blade-database
        
        $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);
        
        $application->add(new \Blade\Migrations\Symfony\Console\InstallCommand($repoDb));
        $application->add(new \Blade\Migrations\Symfony\Console\MakeCommand(new \Blade\Migrations\Operation\MakeOperation($repoFile)));
        $application->add(new \Blade\Migrations\Symfony\Console\StatusCommand(new \Blade\Migrations\Operation\StatusOperation($service)));
        $application->add(new \Blade\Migrations\Symfony\Console\MigrateCommand(new \Blade\Migrations\Operation\MigrateOperation($service)));
        $application->add(new \Blade\Migrations\Symfony\Console\RollbackCommand(new \Blade\Migrations\Operation\RollbackOperation($service)));
    
  4. 在数据库中创建迁移表

        php cli.php migrate:install
    

命令

创建迁移

    php cli.php migrate:make NAME

迁移文件

  • --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 需要使用 ";"

--TRANSACTION
--SEPARATOR=@
--UP
    ... sql@
    ... sql@

--DOWN
    ... sql@
    ... sql@

查看 https://github.com/maxim-oleinik/blade-migrations 的语法

状态

    php cli.php migrate:status

    +---+----+---------------------+------------------------+
    |   | ID | Date                | Name                   |
    +---+----+---------------------+------------------------+
    | Y | 6  | 28.08.2018 20:17:01 | 20180828_195348_M1.sql |
    | D | 7  | 28.08.2018 20:17:21 | 20180828_201639_M3.sql |
    | A |    |                     | 20180828_200950_M2.sql |
    +---+----+---------------------+------------------------+

其中

  • Y - 已执行
  • D - 需要回滚(当前分支中没有该操作)
  • A - 在队列中

迁移

    # Накатить следующую по очереди А-миграцию
    php cli.php migrate:up

    # Не спрашивать подтверждение
    php cli.php migrate:up -f

    # Автомиграция - удаляет D-миграции, накатывает А-миграции
    php cli.php migrate:up --auto

    # Накатить миграцию из указанного файла
    php cli.php migrate:up FILE_NAME

回滚

    # Откатить последнюю Y-миграцию
    php cli.php migrate:rollback

    # Не спрашивать подтверждение
    php cli.php migrate:rollback -f

    # Откатить миграцию по ее номеру
    php cli.php migrate:rollback --id=N

    # Откатить миграцию, инструкции загрузить из файла, а не из БД (например, если в базу попала ошибка)
    php cli.php migrate:rollback --load-file