franzl/laravel-easy-migrations

此包已被废弃,不再维护。未建议替代包。

Laravel的简单可逆迁移

1.0.1 2016-04-09 11:51 UTC

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() 的参数,此方法将返回一个具有已实现的 updown 方法的迁移实例。

文档

此包目前实现了以下四种操作

  • 创建表
  • 重命名表
  • 删除表
  • 重命名列
  • 添加列
  • 删除列

可能很快会实现更多。请随时通过创建问题来建议新的操作类型。

创建表

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]
    ]);
}

同样,就像删除表时一样,您应该指定完整的列定义,以便可以干净地回滚迁移。

有关列类型及其相应选项的参考,请参阅添加列的文档。