没有在 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')
的别名。
在您的 roles
和 permissions
table 迁移中将 $table->increments('id');
更改为 $table->bigIncrements('id');
。
有关迁移专栏的更多信息:https://laravel.com/docs/7.x/migrations#creating-columns
我尝试了不同的方法来解决这个问题,但是 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')
的别名。
在您的 roles
和 permissions
table 迁移中将 $table->increments('id');
更改为 $table->bigIncrements('id');
。
有关迁移专栏的更多信息:https://laravel.com/docs/7.x/migrations#creating-columns