2016-01-14 2 views
0

Я создал две миграции с генераторами Jeffrey Way для Laravel 5. А именно: php artisan make:migrate:schema create_roles_table --schema='name:string, description:text' и php artisan make:migrate:pivot user role.Laravel 5.2 ошибки внешнего ключа

Теперь моя база данных MySQL по умолчанию равна InnoDB, которую я прочитал. Я также переместил настройку внешнего ключа в Schema::table() вместо Schema::create('role_user'). В моих миграциях не должно быть ничего плохого, но они ошибаются: General error: 1215 Cannot add foreign key constraint (SQL: alter table role_user add constraint role_user_user_id_foreign foreign key (user_id) references user (id) on delete cascade).

Schema::create('role_user', function (Blueprint $table) { 
      $table->engine = 'InnoDB'; 
      $table->integer('role_id')->unsigned()->index(); 
      $table->integer('user_id')->unsigned()->index(); 
      $table->primary(['role_id', 'user_id']); 
     }); 

     Schema::table('role_user', function(Blueprint $table){ 
      $table->foreign('user_id')->references('id')->on('user')->onDelete('cascade'); 
      $table->foreign('role_id')->references('id')->on('role')->onDelete('cascade'); 
     }); 

enter image description here

я назвал в каждой миграции $table->engine = 'InnoDB';. Также я установил все столбцы id в unsigned, хотя они уже были такими. Я не знаю, кто мне помогает.

ответ

0

Проверьте, не были ли вы уже перенесены пользователи и роли таблиц. В противном случае вы не сможете создать внешний ключ. Проверьте миграционный заказ. Если вы переносите этот файл до того, как пользователи и роли будут терпеть неудачу.

+0

Порядок, похоже, прав: - Пользователи - Роли - Role_User сводных таблиц - внешние ключи. Я также уронил все столы и заново прогнал все миграции. – jbehrens94

0

Ну, очевидно, это была огромная опечатка. user вместо users, например. Я надеялся, что Ларавел справится с этим, но, к сожалению, Ларавель и я тоже этого не сделали.

0

Это может быть связано с вашей SQL двигателя, проверьте двигатель (MariaDB, MySQL, ...)
А затем прочитайте документацию от вашего двигателя относительно внешних ключей.


Быстрое решение
Удалите onDelete('cascade') и запустить миграцию.
Вы можете добавить его вручную из PhpMyAdmin позже

Смежные вопросы