Laravel 多对多关系无法添加外键约束
Laravel Many to Many relation Cannot add foreign key constraint
我正在使用 Laravel 框架 v.5.7 创建多对多关系。所以我创建了三个迁移。
模块Table
Schema::create('modules', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->integer('price');
});
计划Table
Schema::create('plans', function (Blueprint $table) {
$table->increments('id');
$table->string('stripe_id')->unique();
$table->integer('price');
$table->integer('max_users');
$table->timestamps();
});
关系Table
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()
应用于外键定义,而不是实际的字段定义。
只要您的迁移 运行 按照您上面提到的相同顺序进行,它应该可以工作。
我正在使用 Laravel 框架 v.5.7 创建多对多关系。所以我创建了三个迁移。
模块Table
Schema::create('modules', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->integer('price');
});
计划Table
Schema::create('plans', function (Blueprint $table) {
$table->increments('id');
$table->string('stripe_id')->unique();
$table->integer('price');
$table->integer('max_users');
$table->timestamps();
});
关系Table
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()
应用于外键定义,而不是实际的字段定义。
只要您的迁移 运行 按照您上面提到的相同顺序进行,它应该可以工作。