Общая ошибка 1215: невозможно добавить ограничение внешнего ключа - PullRequest
0 голосов
/ 09 июня 2018

Я получаю следующую ошибку:

SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу subtags добавить ограничение subtags_tag_id_foreign внешний ключ (tag_id) ссылки id (tags) на каскад удаления)

После просмотра других ответов, касающихся этой ошибки в stackoverflow и этой записи блога: https://www.percona.com/blog/2017/04/06/dealing-mysql-error-code-1215-cannot-add-foreign-key-constraint/ Я все еще могу 'не могу понять, почему я получаю сообщение об ошибке.

Это миграция для таблицы вложенных тегов:

public function up()
{
    Schema::create('subtags', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->integer('tag_id')->unsigned();
        $table->integer('id')->unsigned();
        $table->string('name');
        $table->timestamps();
    });

    Schema::table('subtags', function (Blueprint $table) {
        $table->foreign('tag_id')
            ->references('tags')
            ->on('id')
            ->onDelete('cascade');

        $table->primary(array('tag_id', 'id'));
    });
}

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

public function up()
{
    Schema::create('tags', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

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

DB::statement('SET FOREIGN_KEY_CHECKS=0;');
...
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
0 голосов
/ 09 июня 2018

Ваш запрос показывает, что вы неправильно разместили столбец и таблицу в:

Schema::table('subtags', function (Blueprint $table) {
    $table->foreign('tag_id')
          ->references('tags')
          ->on('id')
          ->onDelete('cascade');

    $table->primary(array('tag_id', 'id'));
});

Ссылка должна быть " column " on « Таблица » как:

Schema::table('subtags', function (Blueprint $table) {
    $table->foreign(id'tag_id')
          ->references('id')
          ->on('tags')
          ->onDelete('cascade');

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