franzl / laravel-easy-migrations
Laravel的简单可逆迁移
Requires
- php: >=5.5.9
- illuminate/database: 5.2.*
This package is auto-updated.
Last update: 2021-05-05 11:38:18 UTC
README
Laravel的简单可逆迁移。
此包使您能够轻松创建自动可逆的数据库迁移,以执行常见操作。这样,您就不必处理手动编写迁移的down
逻辑,这项任务耗时且容易出错(更不用说愚蠢且无聊)。
安装
运行 composer require franzl/laravel-easy-migrations
即可。
请注意,就像Laravel一样,如果您想重命名列和/或删除SQLite列,则需要安装 doctrine/dbal
包。
用法
要创建可逆迁移,请从 Franzl\EasyMigrations\EasyMigration
基类扩展您的迁移类。您的任务:重写 change
方法,它需要返回另一个迁移实例。幸运的是,此包已为最常见的迁移操作提供了实现。
例如,要添加新的 users
表
use Franzl\EasyMigrations\Easy; use Franzl\EasyMigrations\EasyMigration; use Illuminate\Database\Schema\Blueprint; class CreateUsersTable extends EasyMigration { public function change() { return Easy::createTable('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); }); } }
基于传递给 Easy::createTable()
的参数,此方法将返回一个具有已实现的 up
和 down
方法的迁移实例。
文档
此包目前实现了以下四种操作
- 创建表
- 重命名表
- 删除表
- 重命名列
- 添加列
- 删除列
可能很快会实现更多。请随时通过创建问题来建议新的操作类型。
创建表
public function change() { return Easy::createTable('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); }); }
重命名表
public function change() { return Easy::renameTable('old_users', 'new_users'); }
删除表
public function change() { return Easy::dropTable('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); }); }
请注意,为了使迁移可逆,您需要传入一个蓝图以完全恢复表。这将执行在回滚迁移时。
重命名列
public function change() { return Easy::renameColumn('users', 'name', 'username'); }
添加列
public function change() { return Easy::addColumns('users', [ 'password' => ['string'], 'registered_at' => ['dateTime', 'nullable' => true] ]); }
第二个参数是一个列定义数组,键是列名。每个项的值是一个数组,包含列定义,这些定义由Laravel的 Illuminate\Database\Schema\Blueprint::addColumn()
方法理解。第一个选项是列类型,任何其他键选项都传递给 addColumn
。
以下选项适用于所有列类型
nullable
:列是否允许NULL
值,布尔值,默认为false
default
:列默认值,混合类型unique
:为列创建唯一索引,布尔值,默认为false
first
:将列作为表中的第一个插入,布尔值,默认为false
,仅MySQL支持after
:直接在指定的现有列之后插入列,字符串,仅MySQL支持
以下列出了所有支持的类型,以及自定义选项
char, string
length
:列大小,整数
text, mediumText, longText
没有特殊选项
integer, tinyInteger, smallInteger, mediumInteger, bigInteger
autoIncrement
:设置为true
将此列标记为序列unsigned
:设置为true
将此列标记为无符号整数
float, decimal
total
:小数位数,整数,默认为8
places
:小数点后位数,整数,默认为2
double
total
:小数位数,整数places
:小数点后位数,整数
boolean
没有特殊选项
enum
allowed
:一个数组,包含该列可能有的值
json, jsonb
没有特殊选项
date, dateTime, dateTimeTz, time, timeTz, timestamp, timestampTz
没有特殊选项
binary
没有特殊选项
uuid
没有特殊选项
删除列
public function change() { return Easy::dropColumns('users', [ 'password' => ['string'], 'registered_at' => ['dateTime', 'nullable' => true] ]); }
同样,就像删除表时一样,您应该指定完整的列定义,以便可以干净地回滚迁移。
有关列类型及其相应选项的参考,请参阅添加列的文档。