2015-04-06 2 views
0
public function up() 
    { 
     Schema::table('partial_trips', function(Blueprint $table) 
     { 
      $table->unsignedInteger('driver_user_id')->after('main_trip_id'); 
     }); 

     Schema::table('partial_trips', function(Blueprint $table) 
     { 
      $table->foreign('driver_user_id') 
       ->references('id') 
       ->on('users') 
       ->onDelete('cascade'); 
     }); 
    } 

Я создал точно такой же FK, с тем же соотношением, в другой таблице, когда таблица была инициализации. Но это не работает. Я получаю следующее сообщение об ошибке:Невозможно добавить внешний ключ в уже существующую таблицу

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or u 
    pdate a child row: a foreign key constraint fails (`bpr`.`#sql-7c82_5 
    7d`, CONSTRAINT `partial_trips_driver_user_id_foreign` FOREIGN KEY (` 
    driver_user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE) 

Глядя на другие должности, касающиеся этой проблемы, я смог найти только те случаи, когда столбец не был unsigned или один из столбцов в отношении не существует. Здесь я рассмотрел оба этих случая и не знаю, в чем проблема ...

+0

данные были получены в таблицах? Невозможно добавить FK, если в таблице (таблицах) есть сиротские записи. –

+0

Да, как справочные, так и ссылочные таблицы имеют данные. – Milkncookiez

+0

вам придется сначала исправить сиротские записи. –

ответ

2

У вас есть некоторые данные в таблице, это означает, что ограничение не будет выполнено, потому что добавленные столбцы будут установлены в NULL для существующих строк. Внутри миграции каждое определение столбца по умолчанию не равно нулю. Вам нужно указать значение NULL, чтобы разрешить нулевые значения для внешнего ключа.

$table->integer('driver_user_id')->unsigned()->nullable()->after('main_trip_id'); 
Смежные вопросы