我如何修复 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 完全匹配。

因为 idbigIncrementsunsigned big integer in users table 那么 role_user.user_id 必须是 unsignedbigInteger,而不是一个 unsignedInteger.

在您的 role_user table

下方更改
 $table->Integer('user_id')->unsigned();

 $table->unsignedBigInteger('user_id');