maxim-oleinik / blade-migrations-laravel
Laravel数据库迁移的智能替代方案 - 使用原始SQL语法、事务、自动回滚、UP-DOWN-UP测试
0.2.3
2021-08-08 12:42 UTC
Requires
- php: >=7.0
- laravel/framework: >=5.1
- maxim-oleinik/blade-migrations: ^0.2
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 ...@
安装
-
使用以下命令通过
composer要求此包composer require maxim-oleinik/blade-migrations-laravel -
更新
config/database.php'migrations' => [ // migrations table name 'table' => 'migrations', // path to migrations dir 'dir' => __DIR__ . '/../database/migrations', ], -
在
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 -
创建迁移表
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