Laravel Отношение ко многим ко многим Не удается добавить ограничение внешнего ключа - PullRequest
0 голосов
/ 27 января 2019

Я создаю отношения ManyToMany с фреймворком Laravel v.5.7.Итак, я создал три миграции.

Таблица модулей

Schema::create('modules', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name')->unique();
    $table->integer('price');
});

Таблица планов

Schema::create('plans', function (Blueprint $table) {
    $table->increments('id');
    $table->string('stripe_id')->unique();
    $table->integer('price');
    $table->integer('max_users');
    $table->timestamps();
});

СвязьТаблица

Schema::create('plan_modules', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('plan_id')->unsigend();
    $table->integer('module_id')->unsigend();
    // Keys
    $table->foreign('plan_id')->references('id')->on('plans')->onDelete('cascade');
    $table->foreign('module_id')->references('id')->on('modules')->onDelete('cascade');
});

Когда я запускаю миграцию, я получаю General error: 1215 Cannot add foreign key constraint.

Доза, если у кого-то есть идея, что не так с миграциями.Движок по умолчанию для mysql установлен на InnoDB.

1 Ответ

0 голосов
/ 27 января 2019

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

Schema::create('plan_modules', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('plan_id')
    $table->unsignedInteger('module_id');
    $table->foreign('plan_id')->references('id')->on('plans')->onDelete('cascade');
    $table->foreign('module_id')->references('id')->on('modules')->onDelete('cascade');
});

Исправлены опечатки, и вам необходимо применить onDelete() к определению внешнего ключа, а не к действительному определению поля.

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

...