Laravel: внешний ключ неправильно сформирован - PullRequest
1 голос
/ 13 марта 2019

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

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

Код:

Schema::create('bindings', function (Blueprint $table) {
    $table->unsignedInteger('users_id');

    $table->foreign('users_id')
        ->references('id')->on('users')
        ->onDelete('cascade')
        ->onUpdate('cascade');
});

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
});

Версия:

PHP: v7.3
Laravel: v5.8.4
MariaDB: v10.3.13
Homestead: v8.1.0

Насколько я знаю, это должно правильно сформировать внешний ключ. Любая помощь будет оценена!

Ответы [ 2 ]

2 голосов
/ 13 марта 2019

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

Когда вы делаете внешние ключи, оба поля должны будутимеют одинаковые свойства.Так что в вашем случае, если вы используете bigIncrements, ваш users_id должен быть беззнаковым большим целым числом.

// User table needs to be created first
Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
});

Schema::create('bindings', function (Blueprint $table) {
    $table->bigInteger('users_id')->unsigned();

    ...
});

Кроме того, стандартное имя - user_id, это облегчит выполнение отношений в Laravel.

1 голос
/ 13 марта 2019

В вашей миграции поместите миграцию родительской таблицы сверху, затем дочернюю таблицу

    Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
        });


Schema::create('bindings', function (Blueprint $table) {
        $table->unsignedBigInteger('user_id');

        $table->foreign('user_id')
            ->references('id')->on('users')
            ->onDelete('cascade')
            ->onUpdate('cascade');
    });

, а затем выполните команду php artisan migrate.

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