我如何解决此错误errno:150“外键约束格式不正确”

时间:2019-10-13 16:11:55

标签: php mysql laravel acl laravel-6

我想在laravel中迁移acl迁移,但出现此错误

错误

  

150“外键约束格式不正确”

public function up()
    {


        Schema::create('roles', function (Blueprint $table) {
            $table->Increments('id');
            $table->string('title_fa');
            $table->string('title_en');
            $table->timestamps();
        });

        Schema::create('permissions', function (Blueprint $table) {
            $table->Increments('id');
            $table->string('title_fa');
            $table->string('title_en');
            $table->timestamps();
        });

        Schema::create('role_user', function (Blueprint $table) {
            $table->integer('role_id');
            $table->integer('user_id');

            $table->foreign('role_id')
                ->references('id')
                ->on('roles')
                ->onUpdate('cascade')
                ->onDelete('cascade');
            $table->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onUpdate('cascade')
                ->onDelete('cascade');
        });

        Schema::create('permission_role', function (Blueprint $table) {
            $table->integer('permission_id');
            $table->integer('role_id');

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

我尝试取消角色ID和用户id的Inteager签名,然后尝试:

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

但这不适合我

1 个答案:

答案 0 :(得分:0)

您想像这样将整数更改为unsigned biginteger:


public function up() {

    Schema::create('roles', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('title_fa');
        $table->string('title_en');
        $table->timestamps();
    });

    Schema::create('permissions', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('title_fa');
        $table->string('title_en');
        $table->timestamps();
    });

    Schema::create('role_user', function (Blueprint $table) {
        $table->unsignedBigInteger('role_id');
        $table->unsignedBigInteger('user_id');

        $table->foreign('role_id')
            ->references('id')
            ->on('roles')
            ->onUpdate('cascade')
            ->onDelete('cascade');
        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onUpdate('cascade')
            ->onDelete('cascade');
    });

    Schema::create('permission_role', function (Blueprint $table) {
        $table->unsignedBigInteger('permission_id');
        $table->unsignedBigInteger('role_id');

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