BonBonSlick
@BonBonSlick
Vanilla Web Architect

General error: 1215 Cannot add foreign key constraint Laravel 5.3?

Не пойму почему, первый foreign_key работает, а второй - нет.

// это pivot table, беру id юзера,  делаю связь, все работает, но не надет поставить связь с roles таблицей
         Schema::create('user_role', function (Blueprint $table) {
            $table->increments('id')->unsigned();
            $table->integer('user_id')->unsigned()->nullable();
            $table->integer('role_id')->unsigned()->nullable();
            $table->timestamps();
            $table->foreign('user_id')->references('user_id')->on('users')->onDelete('cascade');
            // $table->foreign('id')->references('role_id')->on('roles')->onDelete('cascade');
        });


Такая ошибка:
[Illuminate\Database\QueryException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter
  table `user_role` add constraint `user_role_id_foreign` foreign key (`id`) referenc
  es `roles` (`role_id`) on delete cascade)



  [PDOException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

Используется InnoDB.


Что я проглядел?
  • Вопрос задан
  • 10600 просмотров
Решения вопроса 3
ironfrol
@ironfrol
С Laravel 5.8 поменялся метод автоинкремента (id). было
$table->increments('id')
А сейчас:
$table->bigIncrements('id')
Следовательно, делайте привязку на bigInteger
$table->bigInteger('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Ответ написан
BonBonSlick
@BonBonSlick Автор вопроса
Vanilla Web Architect
Решил проблему. Спасибо Laravel и его магии.

Промежуточную таблицу, необходимо создавать после основных users и roles, только после их, создать промежуточную user_role!

Проблема была в порядке создания таблиц ( миграций ) - удалите миграцию, и создайте по новой.
Ответ написан
gromdron
@gromdron
Bitrix developer
Надеюсь Я не прав, но насколько я понмню, нельзя вызывать $table->foreign() до вызова Schema::create.
У меня заработал фрагмент:

if (!Schema::hasTable('d_handlers')) {
    Schema::create('d_handlers', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->integer('module')->unsigned();
        $table->timestamps();
     });
    Schema::table('d_handlers', function($table) {
        $table->foreign('module')->references('id')->on('d_modules')->onDelete('cascade');
    });
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Такая ошибка бывает, когда поле, на которое ссылается ключ, имеет другой тип, например там не стоит unsigned.
Ответ написан
@hakkol
Может так:
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы