是否有必要在laravel中的每个up()中写下down()?

时间:2015-02-26 09:30:04

标签: laravel migration database-migration laravel-migrations

class UpdateSessions extends Migration {

    public function up()
    {
            Schema::table('sessions', function($table){
                $table->string('comCode')->nullable()->change();
            });
    }

    public function down()
    {
         // What should i write here?
    }

}

我已经创建了一个会话表来编写迁移,以将列更改为可为空。 现在我对我应该写下什么感到困惑?

2 个答案:

答案 0 :(得分:1)

在迁移的down方法中,撤消您在up方法中所做的更改。使用artisan migrate:rollback命令回滚迁移时,将调用此方法。在你的情况下,它看起来像这样:

public function down()
{
    // Laravel doesn't have a method to undo ->nullable()
    // so you have to do use a raw query in this case
    DB::statement('ALTER TABLE sessions MODIFY comCode VARCHAR(255) NOT NULL');
}

因此,如果在迁移up中将名为comCode的列修改为可为空,则在回滚迁移时,您需要更新该列定义以使其不为空,并且这是你在down方法中所做的。

为了使迁移成功运行,没有必要在down方法中包含任何内容,但是一旦迁移运行,您将无法将其回滚,除非您在down方法中使用正确的代码。

答案 1 :(得分:0)

截至2015年12月,至少在Laravel 5中你可以写

Schema::table('sessions', function($table){
    $table->string('comCode')->change();
});

注意:这次没有nullable()