我如何修复 laravel 中的此错误“1005 无法创建 table `english village`。`role_user`(错误号:150 "Foreign key constraint is incorrectly formed"
how can i fix this eror in laravel" 1005 Can't create table `englishcollage`.`role_user` (errno: 150 "Foreign key constraint is incorrectly formed"
我想在我的 Laravel 项目中进行 ACL 迁移...(版本 6)
但我收到这个恼人的错误:
一般错误:1005 无法创建 table English Collage
.role_user
(Errno: 150 "Foreign key constraint is incorrectly formed")")
English Collage 是我的数据库。
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->Integer('role_id')->unsigned();
$table->Integer('user_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
});
Schema::create('permission_role', function (Blueprint $table) {
$table->unsignedInteger('permission_id');
$table->unsignedInteger('role_id');
$table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');
});
这是我的用户迁移:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('image')->nullable();
$table->string('level')->nullable();
$table->integer('age')->nullable();
$table->rememberToken();
$table->timestamps();
});
此结构在 laravel 5 中有效,但 laravel 6 对此有问题
我尝试了大整数和无符号大整数,甚至我测试了 primary_key role_user
很有可能是这条线
$table->Integer('role_id')->unsigned();
如果角色 table 的 id
字段不是整数(最新的 Laravel 使用 unsignedBigInteger),那么 MySQL 不会满意。
尝试
$table->unsignedBigInteger('role_id');
试试这个,我希望它能正常工作
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->Integer('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade')->unsigned();
$table->Integer('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade')->unsigned();
});
Schema::create('permission_role', function (Blueprint $table) {
$table->unsignedInteger('permission_id')->references('id')->on('permissions')->onDelete('cascade')->onUpdate('cascade');
$table->unsignedInteger('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');
});
要创建外键,child column
的数据类型必须与 parent column
完全匹配。
因为 id
是 bigIncrements
即 unsigned big integer
in users
table 那么 role_user.user_id
必须是 unsignedbigInteger
,而不是一个 unsignedInteger
.
在您的 role_user
table
下方更改
$table->Integer('user_id')->unsigned();
至
$table->unsignedBigInteger('user_id');
我想在我的 Laravel 项目中进行 ACL 迁移...(版本 6)
但我收到这个恼人的错误:
一般错误:1005 无法创建 table English Collage
.role_user
(Errno: 150 "Foreign key constraint is incorrectly formed")")
English Collage 是我的数据库。
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->Integer('role_id')->unsigned();
$table->Integer('user_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
});
Schema::create('permission_role', function (Blueprint $table) {
$table->unsignedInteger('permission_id');
$table->unsignedInteger('role_id');
$table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');
});
这是我的用户迁移:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('image')->nullable();
$table->string('level')->nullable();
$table->integer('age')->nullable();
$table->rememberToken();
$table->timestamps();
});
此结构在 laravel 5 中有效,但 laravel 6 对此有问题
我尝试了大整数和无符号大整数,甚至我测试了 primary_key role_user
很有可能是这条线
$table->Integer('role_id')->unsigned();
如果角色 table 的 id
字段不是整数(最新的 Laravel 使用 unsignedBigInteger),那么 MySQL 不会满意。
尝试
$table->unsignedBigInteger('role_id');
试试这个,我希望它能正常工作
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('title_fa'); // edit posts
$table->string('title_en'); //edit-posts
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->Integer('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade')->unsigned();
$table->Integer('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade')->unsigned();
});
Schema::create('permission_role', function (Blueprint $table) {
$table->unsignedInteger('permission_id')->references('id')->on('permissions')->onDelete('cascade')->onUpdate('cascade');
$table->unsignedInteger('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');
});
要创建外键,child column
的数据类型必须与 parent column
完全匹配。
因为 id
是 bigIncrements
即 unsigned big integer
in users
table 那么 role_user.user_id
必须是 unsignedbigInteger
,而不是一个 unsignedInteger
.
在您的 role_user
table
$table->Integer('user_id')->unsigned();
至
$table->unsignedBigInteger('user_id');