没有在 Laravel 7 中制作 table

Not making a table in Laravel 7

我尝试了不同的方法来解决这个问题,但是 none 已经解决了 problem.This 部分代码用于在 Laravel 中建立关系,但是这段代码在 Laravel 5 中有效,但在 Laravel 7.

中容易出错

错误: SQLSTATE[HY000]: 一般错误: 1005 无法创建 table shoplaravel.role_user (errno: 150 "Foreign key constraint is incorrectly formed") (SQL : alter table role_user add constraint role_user_role_id_foreign foreign key (role_id) references roles (id) on delete cascade on update cascade)

    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->unsignedBigInteger('role_id');
        $table->unsignedBigInteger('user_id');

        $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']);
    });
    Schema::create('permission_role', function (Blueprint $table) {
        $table->unsignedBigInteger('role_id');
        $table->unsignedBigInteger('permission_id');

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

        $table->foreign('permission_id')
            ->references('id')
            ->on('permissions')
            ->onDelete('cascade')
            ->onUpdate('cascade');
        $table->primary(['permission_id', 'role_id']);
    });

删除 BigInteger 并仅使用 unsignedInteger

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->unsignedInteger('role_id');
        $table->unsignedInteger('user_id');

        $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']);
    });
    Schema::create('permission_role', function (Blueprint $table) {
        $table->unsignedInteger('role_id');
        $table->unsignedInteger('permission_id');

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

        $table->foreign('permission_id')
            ->references('id')
            ->on('permissions')
            ->onDelete('cascade')
            ->onUpdate('cascade');
        $table->primary(['permission_id', 'role_id']);
    });

外键的类型必须与其引用的列完全相同。

Laravel 的默认用户 table 迁移使用 $table->increments('id'); - $table->bigIncrements('id') 的别名。

在您的 rolespermissions table 迁移中将 $table->increments('id'); 更改为 $table->bigIncrements('id');

有关迁移专栏的更多信息:https://laravel.com/docs/7.x/migrations#creating-columns