如何在 Laravel 中修改迁移?

2022-08-30 14:54:15

我正在尝试修改现有迁移。这是我当前的迁移类:

class CreateLogForUserTable extends Migration
{
    public function up()
    {
        Schema::create('log_for_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id');
            $table->string('table_name');
            $table->string('error_message');
            $table->unsignedTinyInteger('error_code');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('log_for_user');
    }
}

我已经执行了一次命令。现在我需要将方法添加到列中。所以我编辑了我的迁移,如下所示:php artisan migrate->nullable()error_message

.
.
    $table->string('error_message')->nullable();
.
.

但是当我再次执行时,它说:php artisan migrate

无需迁移。

如何应用迁移的新版本?


答案 1

您应该使用以下命令创建新的迁移:

php artisan make:migration update_error_message_in_log_for_user_table

然后,在创建的迁移类中,使用如下方法添加此行:change

class UpdateLogForUserTable extends Migration
{
    public function up()
    {
        Schema::table('log_for_user', function (Blueprint $table) {
            $table->string('error_message')->nullable()->change();
        });
    }

    public function down()
    {
        Schema::table('log_for_user', function (Blueprint $table) {
            $table->string('error_message')->change();
        });
    }
}

要进行这些更改并运行迁移,请使用以下命令:

php artisan migrate

并要回滚更改,请使用以下命令:

php artisan migrate:rollback

您可以通过提供回滚命令的选项来回滚有限数量的迁移。例如,以下命令将回滚最近五次迁移:step

php artisan migrate:rollback --step=5

详细了解如何使用迁移修改列


答案 2

如果你的应用未投入生产,并且你设定了数据的种子,则你能做的最好的事情就是运行:

php artisan migrate:refresh --seed

此命令将删除所有表并重新创建它们。然后,它将为数据设定种子。

如果要在开发过程中为每个更改创建其他迁移,则最终会得到数百个迁移类。


推荐