maxim-oleinik/blade-migrations-laravel

Laravel数据库迁移的智能替代方案 - 使用原始SQL语法、事务、自动回滚、UP-DOWN-UP测试

0.2.3 2021-08-08 12:42 UTC

This package is auto-updated.

Last update: 2024-09-08 20:22:21 UTC


README

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

Laravel 5 数据库迁移的智能替代方案

功能

  • 使用原始SQL查询
    • 可以充分利用数据库的能力来描述结构和变更
    • 轻松处理存储过程和函数
    • 安全的数据迁移(INSERT/UPDATE)
    • IDE原生语法支持
  • 在事务中运行迁移,在出现错误时自动回滚(如果您的数据库支持,例如PostgreSQL)
  • 动态输出执行SQL查询
  • 切换分支后自动回滚(用于审查、测试、演示、在永久/预发布数据库中构建)
  • 编辑后自动更新迁移(迁移文件名称中的版本更改)
  • 应用并回滚测试 - UD-DOWN-UP
  • 回滚或重新加载任何选定的迁移

要求

  • PHP >= 7.0
  • Laravel >= 5.1(支持所有版本 5.1 - 8.X)

语法

  • --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-laravel
    
  2. 更新config/database.php

        'migrations' => [
            // migrations table name
            'table' => 'migrations',
    
            // path to migrations dir
            'dir'   => __DIR__ . '/../database/migrations',
        ],
    
  3. config/app.php中注册ServiceProvider
    对于Laravel < 5.5

       'providers' => [
            ...
            Blade\Migrations\Laravel\MigrationsServiceProvider::class,
        ],
    

    对于Laravel 6/7/8.X

    replace
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class
    with
        Illuminate\Foundation\Providers\ComposerServiceProvider::class,
        Illuminate\Foundation\Providers\ArtisanServiceProvider::class
    do disable original mirgations
    
  4. 创建迁移表

        php artisan migrate:install
    

用法

创建迁移文件

    php artisan make:migration NAME

状态

    php artisan 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 - 尚未应用,下一个要运行

迁移

    # Apply next А-migration
    php artisan migrate

    # Apply the migration without a prompt
    php artisan migrate -f

    # Apply with rollback testing: UP-DOWN-UP
    php artisan migrate -t

    # Auto-migrate all - rollback all D-migrations and appply all А-migrations
    php artisan migrate --auto

    # Apply migration from the specified file
    php artisan migrate FILE_NAME

回滚

在应用迁移后,包含SQL命令的迁移文件将保存到数据库中。因此,回滚是处理这些已保存的指令。这样做是为了能够在项目切换到不包含此文件的分支时回滚迁移。

    # Rollback the latest Y-migration
    php artisan migrate:rollback

    # To force the rollback without a prompt
    php artisan migrate:rollback -f

    # Rollback migration by its ID
    php artisan migrate:rollback --id=N

    # Rollback migration with commands taken from migration file, not from DB (if saved version contains error)
    php artisan migrate:rollback --load-file

重新加载

回滚迁移并再次运行

    php artisan migrate:reload

    # the same options as rollback
    php artisan migrate:reload -f --id=N --load-file