在Laravel 5迁移中使列不可为空

时间:2015-10-09 10:04:30

标签: php sql laravel-5

我发现这个问题与我的Make column not nullable in a Laravel migration非常相似,虽然已经差不多3岁了,但它肯定不属于Laravel 5

我的问题是我有一个迁移,它在up函数中修改了一个列,使其可以为空。 现在,在down函数中我想让它再次无法为空。

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('mytable', function(Blueprint $table) {
        $table->string('mycolumn')->nullable()->change();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('mytable', function(Blueprint $table) {
    /* THIS IS WHAT I WOULD EXPECT TO DO
    THOUGH OF COURSE THE FUNCTION notNullable DOES NOT WORK */
        $table->string('mycolumn')->notNullable()->change(); 
    });
}

我可以使用原始SQL实现这一点,但我想使用Laravel方法实现它,如果可能的话......但是我找不到它,可能它还没有在版本5中实现它。

2 个答案:

答案 0 :(得分:23)

将其重置为不可空。你可以试试这个。

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('mytable', function(Blueprint $table) {
        $table->string('mycolumn')->nullable()->change();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('mytable', function(Blueprint $table) {
    /* By default it's NOT NULL */
        $table->string('mycolumn')->nullable(false)->change(); // <--- here
    });
}

答案 1 :(得分:2)

默认情况下它是NOT NULL,所以你应该试试这个。

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('mytable', function(Blueprint $table) {
        $table->string('mycolumn')->nullable()->change();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('mytable', function(Blueprint $table) {
    /* By default it's NOT NULL */
        $table->string('mycolumn')->change(); 
    });
}