[英]: 1005 Can't create table `shop`.`role_user` (errno: 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 無法創建表English Collage
。 role_user
(Errno: 150 "外鍵約束的role_user
不正確")")
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 有這個問題
我嘗試了大整數和無符號大整數,即使我為 role_user 測試了 primary_key
最有可能是這條線
$table->Integer('role_id')->unsigned();
如果角色表的id
字段不是整數(最新的 Laravel 使用 unsignedBigInteger),那么 MySQL 不會高興。
嘗試
$table->unsignedBigInteger('role_id');
要創建外鍵, child column
的數據類型必須與parent column
完全匹配。
由於id
是一個bigIncrements
即users
表中的unsigned big integer
,那么role_user.user_id
必須是unsignedbigInteger
,而不是unsignedInteger
。
在您的role_user
表中更改以下role_user
$table->Integer('user_id')->unsigned();
到
$table->unsignedBigInteger('user_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');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.