как я могу исправить эту ошибку errno: 150 «Ограничение внешнего ключа сформировано неправильно» - PullRequest
1 голос
/ 13 октября 2019

Я хочу перенести миграцию acl в laravel, но я получил эту ошибку

ОШИБКА

150 "Неправильно сформировано ограничение внешнего ключа"

TABLE

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');
        });
    } 

Я пытаюсь использовать unsign integer для идентификатора роли и пользователя id и пробую:

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

но это не для меня

1 Ответ

0 голосов
/ 13 октября 2019

Вы хотите изменить свое целое число на 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');
    });
} 
...