【发布时间】:2021-06-15 19:04:57
【问题描述】:
尝试创建3个表,分别是权限,users_roles和permission_role。但是迁移时出现错误。
SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:更改表permission_role 添加约束permission_role_permission_id_foreign 外键(permission_id)在删除级联时引用permissions(id))
这是我的迁移:
public function up()
{
Schema::create('users_roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('user_id');
$table->nullableTimestamps();
});
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('definition')->nullable();
$table->nullableTimestamps();
});
}
public function down()
{
Schema::dropIfExists('users_roles');
Schema::dropIfExists('permissions');
}
public function up()
{
Schema::create('permission_role', function (Blueprint $table) {
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->nullableTimestamps();
$table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('users_roles')->onDelete('cascade');
$table->primary(['permission_id', 'role_id']);
});
}
public function down()
{
Schema::dropIfExists('permission_roles');
}
我使用 unsigned() 并且不明白我的代码有什么问题。
【问题讨论】:
-
你没有提到你的 laravel 版本。无论如何,对于 role_id 也使用 bigInteger
$table->bigInteger('permission_id')->unsigned();。还将您的所有主键$table->increments('id');更改为$table->bigIncrements('id'); -
它有效!谢谢,但为什么他们应该以“大”开头