簡體   English   中英

我如何在 Laravel 中修復此錯誤”1005 無法創建表 `englishcollage`.`role_user`(錯誤號:150“外鍵約束的格式不正確”

[英]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是一個bigIncrementsusers表中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM