2016-08-26 6 views
1

私はこの移行を行っています。移行ロールバック時にフィールドをNulleableにしないでください

public function up() 
{ 
    Schema::table('products', function (Blueprint $table) { 
     $table->integer('category_id')->nullable()->unsigned()->change(); 
    }); 
} 


public function down() 
{ 
    Schema::table('products', function (Blueprint $table) { 
     $table->integer('category_id')->nullable(false)->change(); 
    }); 
} 

それは方法アップにCATEGORY_IDフィールドのNULL可能になり、正常に動作が、私はロールバックしようとすると、このエラーを返します:

[PDOException] 
SQLSTATE[HY000]: General error: 1832 Cannot change column 'category_id': used in a foreign key constraint 'products_category_id_foreign' 

私はロールバックに何をすべき?この移行の目的は、実行時にフィールドをNULLにし、ロールバック時に値を返さないようにすることです。

+1

ロールバックすると、null category_idを含むすべての行が突然無効になるという問題があります。そのため、最初に行を削除して実行する必要があります。 (それは外部キーの制約であるため、それでも動作しない可能性がありますが、試してみる価値があります)。 –

答えて

1

私は外来キーの制約を無効にすることをお勧めします。しかし、このことの意味を覚えておいてください。

関連する問題