Внешний ключ неправильно сформирован в Laravel - PullRequest
0 голосов
/ 20 июня 2019

У меня есть два следующих файла миграции:

Schema::create('words', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users');
    $table->integer('book_id')->unsigned()->nullable();
    $table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');
    $table->string('title');
    $table->longText('definition', 2056);
    $table->timestamps();
});

и

Schema::create('books', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users');
    $table->integer('word_id')->unsigned()->nullable();
    $table->foreign('word_id')->references('book_id')->on('words');
    $table->string('title');
    $table->string('author')->nullable();
    $table->date('start_date')->nullable();
    $table->date('end_date')->nullable();
    $table->integer('no_pages')->nullable();
    $table->integer('current_page')->nullable();
    $table->integer('status')->nullable();
    $table->timestamps();
});

Когда я запускаю команду migrate, возникает следующая ошибка:

Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1005 Ca
n't create table `words`.`#sql-16bc_76` (errno: 150 "Foreign key constraint is i
ncorrectly formed") (SQL: alter table `books` add constraint `books_word_id_fore
ign` foreign key (`word_id`) references `words` (`book_id`))

Почему это происходит? Я добавил word_id в таблицу книг, чтобы я мог сосчитать слова, добавленные для этой книги.

1 Ответ

0 голосов
/ 20 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...