Laravel - Невозможно добавить ограничение внешнего ключа - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь добавить FK 'module_id' к моей таблице 'Documents'. Я выполнил следующий запрос:

 public function up()
    {
        Schema::table('documents', function (Blueprint $table) {

            $table->integer('module_id')->unsigned();
            $table->foreign('module_id')->references('id')->on('modules');

        });
    }

Возвращается следующая ошибка:

SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL : alter table documents добавить ограничение documents_module_id_foreign ссылки на внешние ключи (module_id) modules (id))

Я не уверен, что делаю неправильно, я Я уверен, что это, вероятно, глупая ошибка, но я провел много времени в кругах, пытаясь выяснить это ... вот что я пытался ..

  • обе таблицы уже создал
  • типы данных для обоих столбцов непротиворечивы (оба unsignedBigInts, 20)

Я включил изображение своих таблиц БД, я ценю любую помощь. enter image description here enter image description here

Обновление:

SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочерняя строка: сбой ограничения внешнего ключа (laravel. #sql-2cd_23, CONSTRAINT documents_module_id_foreign FOREIGN KEY (module_id) ССЫЛКИ modules (id)) (SQL: изменить таблицу documents добавить ограничение documents_module_id_foreign ссылки на внешние ключи (module_id) modules (id))

1 Ответ

1 голос
/ 01 апреля 2020

Тип столбца должен быть большим целым числом.

    Schema::table('documents', function (Blueprint $table) {
        $table->unsignedBigInteger('module_id');
        $table->foreign('module_id')->references('id')->on('modules');

    });

Обновить

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

$table->unsignedBigInteger('module_id')->nullable();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...