2016-08-26 2 views
1

У меня есть эта миграция.Cant make field not nulleable on migration rollback

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 поле обнуляемые по методу вверх и работать нормально, но когда я пытаюсь откатить возвращает эту ошибку:

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

Что я должен делать на откате? Цель этой миграции - сделать поле нулевым при запуске и вернуть его обратно при откате.

+1

Проблема в том, что когда вы откатываете ее назад, каждая строка, содержащая null category_id, внезапно становится недействительной. Поэтому вам нужно сначала удалить эти строки, чтобы запустить его. (И это может не сработать даже тогда, потому что это ограничение внешнего ключа - но это стоит попробовать.) –

ответ

1

Я думаю, вы можете попробовать отключить ограничения внешнего ключа. Помните о последствиях этого.