Laravel多对多关系无法添加外键约束

时间:2019-01-27 11:58:19

标签: mysql laravel laravel-5 laravel-migrations

我正在使用Laravel框架v.5.7创建ManyToMany关系。所以我创建了三个迁移。

模块表

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 :(得分:2)

您的上一次迁移应如下:

.container {
    .block {
        &.scarlet {
            color: red;
            body.landing & { 
                color: pink; 
            }
        }
    }
}

修复了拼写错误,您需要将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'); }); 应用于外键定义,而不是实际的字段定义。

提供了您的迁移按照与上述相同的顺序运行的消息,它应该可以正常工作。