向迁移失败的数据库表添加新列 - 无需迁移

时间:2017-02-27 12:34:27

标签: php database laravel migration laravel-5.4

我刚学会了如何使用迁移。我成功创建了一个包含此模式的表:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('units', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('description');
        $table->timestamps();
    });
}

不幸的是,我错过了专栏path,所以我试图添加它。首先,我通过laravel documentation通知myselfe,了解如何添加新列。

来自文档:

  

Schema Facade上的表方法可用于更新现有的表方法   表。

我的尝试:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('units', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('description');
        $table->timestamps();
    });

    Schema::table('units', function (Blueprint $table) {
        $table->string('path');
    });
}

然而,在执行php artisan migrate后,我得到Nothing to migrate

我做错了什么?

2 个答案:

答案 0 :(得分:6)

您需要首先回滚迁移,这会破坏包含所有数据的上次迁移表:

php artisan migrate:rollback

然后再次运行php artisan migrate命令。当app正在开发中时,它是最好的选择。

如果您因某些原因不愿意这样做(应用程序是实时等),但只想添加一列,然后创建一个新的迁移并添加此代码:

public function up()
{
    Schema::table('units', function (Blueprint $table) {
        $table->string('path');
    });
}

并运行以下命令:

composer dumpauto
php artisan migrate

答案 1 :(得分:1)

您必须为列更新创建新迁移。或者,您可以回滚上次迁移,添加缺少的列,然后重新运行迁移(假设您没有在生产中运行迁移)

回滚:php artisan migrate:rollback