Laravel миграция Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа Laravel 7.x - PullRequest
0 голосов
/ 27 марта 2020

Я хочу использовать две модели в своем приложении laravel 7.x: Пользователи и изображения:

# Users migration : 2014_10_12_000000_create_users_table.php

Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

# Images migration : 2020_03_27_121254_create_models_images_table
Schema::create('images', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('user_id')->unsigned;
        $table->string('name');
        $table->timestamps();
    });

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

При попытке выполнить миграцию я получаю следующую ошибку: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу images добавить ограничение images_user_id_foreign ссылки на внешний ключ (user_id) users (id) при каскаде удаления)

Я уже безуспешно искал в Google, кто-нибудь может помочь мне, пожалуйста?

Спасибо

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Проблема

Вы неправильно настраиваете unsigned.

Решение

Замените:

$table->bigInteger('user_id')->unsigned;

По:

$table->bigInteger('user_id')->unsigned();

Пояснение

Поскольку user_id не является беззнаковым, определение не соответствует id таблицы users, что означает, что вы не можете установить внешний ключ.

До Laravel 7.x

Вы также можете сделать:

$table->unsignedBigInteger('user_id');

Laravel 7.x

Начиная с Laravel 7, вы можете сделать это как в вашей users миграции:

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

И в вашей images миграции:

Schema::table('users', function (Blueprint $table) {
    // ...
    $table->foreignId('user_id')->constrained();
});

Вы можете найти больше информации здесь: https://laravel.com/docs/7.x/migrations#foreign - ключевые ограничения

0 голосов
/ 27 марта 2020

Отсутствует скобка в unsiged()

Согласно Laravel Документация

->unsigned() Установить INTEGER столбцы как UNSIGNED (MySQL)

Изменить

 $table->bigInteger('user_id')->unsigned;

на

$table->bigInteger('user_id')->unsigned();
...