回滚新列将删除整个表

时间:2019-02-14 13:09:39

标签: php laravel

我正在尝试使用laravel 4.2中的迁移回滚数据库表中的更新列。

public function up()
{
    if (Schema::hasTable('payments') && !Schema::hasColumn('payments', 'updated_at')) {

        Schema::table('payments', function (Blueprint $table) {
            $table->dateTime('updated_at')->nullable();
        });
    }
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    if (Schema::hasTable('payments')) {

        Schema::table('payments', function (Blueprint $table) {
            Schema::drop('updated_at');
        });
    }
}

当我以这种方式进行操作时,它表明updated_at表不存在:

Schema::drop('updated_at');

通过这种方式删除了整个表格:

Schema::drop('payments', 'updated_at');

那应该是什么样子?

谢谢你,并祝你一切顺利!

3 个答案:

答案 0 :(得分:3)

Schema::drop('updated_at');告诉数据库删除updated_at表,该表显然不存在。您需要使用$table->dropColumn('updated_at')在特定表上添加一列。见下文:

public function down(){
    if (Schema::hasTable('payments')) {
        Schema::table('payments', function (Blueprint $table) {
            $table->dropColumn('updated_at');
        });
    }
}

您可以看到自己已经在Schema::table("payments" ...)函数中,因此使用$table->dropColumn()将尝试从付款表中删除该列。

答案 1 :(得分:1)

使用$table变量:

Schema::table('payments', function($table)
{
    $table->dropColumn('updated_at');
});

答案 2 :(得分:0)

尝试一下:

public function down()
{
     Schema::table('payments', function (Blueprint $table) {
          $table->dropColumn('updated_at');
     });
}