Миграция Laravel (ошибка: 150 «Ограничение внешнего ключа сформировано неправильно») - PullRequest
1 голос
/ 20 апреля 2019

Я пытаюсь получить конкретные данные из базы данных, используя столбцы chatter_discussion, когда пользователь щелкает ссылку, но я получаю эту ошибку:

SQLSTATE [HY000]: Общая ошибка: 1005Невозможно создать таблицу forums.chatter_discussion (номер ошибки: 150 «Ограничение внешнего ключа сформировано неправильно») (SQL: изменить таблицу chatter_discussion добавить ограничение chatter_discussion_user_id_foreign ссылки на внешний ключ (user_id) users (id)при удалении каскада при обновлении каскада)

Schema::table('chatter_discussion', function (Blueprint $table) {
    $table->foreign('chatter_category_id')->references('id')->on('chatter_categories')
        ->onDelete('cascade')
        ->onUpdate('cascade');
    $table->foreign('user_id')->references('id')->on('users')
        ->onDelete('cascade')
        ->onUpdate('cascade');
});

Schema::table('chatter_post', function (Blueprint $table) {
    $table->foreign('chatter_discussion_id')->references('id')->on('chatter_discussion')
        ->onDelete('cascade')
        ->onUpdate('cascade');
    $table->foreign('user_id')->references('id')->on('users')
        ->onDelete('cascade')
        ->onUpdate('cascade');
    });
}

1 Ответ

1 голос
/ 20 апреля 2019

Проблема обычно возникает при переходе на новые версии Laravel, которые используют bigIncrements вместо increments при определении первичных ключей в схеме.Также вам необходимо определить тип внешнего ключа перед определением отношения внешнего ключа.

Исправление состоит в том, чтобы определить тип внешнего ключа, а затем определить отношение внешнего ключа, например:

Schema::table('chatter_discussion', function (Blueprint $table) {
// first define the type of the foreign keys in the schema
$table->bigInteger('chatter_category_id')->unsigned(); // the id of the chatter category
$table->bigInteger('user_id')->unsigned(); // the id of the user
/*
or use:
$table->integer('chatter_category_id');
$table->integer('user_id');
if using older versions of laravel, whatever works
*/        
// THEN define foreign key relations
$table->foreign('chatter_category_id')->references('id')->on('chatter_categories')
                    ->onDelete('cascade')
                    ->onUpdate('cascade');
        $table->foreign('user_id')->references('id')->on('users')
                    ->onDelete('cascade')
                    ->onUpdate('cascade');
    });

Аналогично для других таблиц, которые ссылаются на внешние ключи

ПРИМЕЧАНИЕ , в вашем примере вы не определяете столбец id в таблице chatter_discussion, на который затем ссылаются в chatter_post.Не уверен, что вы пропустили или определены в предыдущей миграции.

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