Я создаю отношения 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.






Ваша последняя миграция должна быть следующей:
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() к определению внешнего ключа, а не к фактическому определению поля.
При условии, что ваша миграция выполняется в том же порядке, который вы упомянули выше, она должна работать.
По сути делает то же самое :)
Приращение @Markus - это целое число без знака, и следует помнить, что атрибуты связанных полей должны быть точно такими же, как и атрибуты реляционных полей. Также попробуйте следовать соглашению об именах Eloquent, которое говорит вам, что имя сводной таблицы должно быть module_plan (проверьте почему в документации). Позже это решит много головной боли, если вы будете следовать их стандартам.
Спасибо, это работает. В чем разница между
unsignedInteger()иinteger()->unsigned()?