我无法迁移,我该怎么做(laravel-5.8)? SQLSTATE [HY000]:常规错误:1215无法添加外键约束

问题描述 投票:0回答:1
  • 1。为什么我不能迁移?

    我想创建角色权限表,但是我无法添加外键,但出现此错误:SQLSTATE [HY000]:常规错误:1215无法添加外键约束

  • 我曾尝试迁移,但出现了一些错误

  • 我不知道我在Laravel 5.8中应该做什么

    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateRoleAndPermissionTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
    
            Schema::create('roles', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->string('title')->nullable();
                $table->timestamps();
            });
    
            Schema::create('permissions', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->string('title')->nullable();
                $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');
    
                $table->primary(['role_id','user_id']);
    
            });
    

2。它只是迁移上表,它不会迁移该表吗?

          Schema::create('permission_role', function (Blueprint $table) {


                $table->integer('permission_id')->unsigned();
                $table->integer('role_id')->unsigned();


                $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade')->onUpdate('cascade');
                $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade')->onUpdate('cascade');

                 $table->primary(['permission_id','role_id']);  
            });
        }

        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('role_and_permission');
        }
    }
laravel laravel-5.8
1个回答
0
投票

注释或从所有迁移中删除所有$table->foreign('')。它将起作用。

最佳解决方案是在$table->bigIncrements('')上使用primary key而不是$table->increments(''),在$table->unsignedBigInteger('');上使用foreign keys而不是$table->integer('');

因为Laravel 5.8$table->bigIncrements('')上使用primary key,在$table->unsignedBigInteger('');上使用foreign keys

© www.soinside.com 2019 - 2024. All rights reserved.