【发布时间】:2023-04-07 23:01:01
【问题描述】:
我有 3 个表可以相互连接。表名称的角色、role_user 和用户。我想在 laravel 上进行迁移并添加一些约束。这是我的角色表迁移中的内容:
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('description');
$table->timestamps();
});
这是我的用户表迁移:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username')->unique();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->boolean('active')->default(0);
$table->softDeletes();
$table->rememberToken();
$table->timestamps();
});
这是我的 role_user 表迁移:
Schema::create('role_user', function (Blueprint $table) {
$table->integer('role_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->unique(['role_id', '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');
});
在我的迁移顺序中,我已经将角色表放在用户之上,但我得到了这种错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (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)
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
【问题讨论】:
-
如果是多对多关系,您的表是正确的,
role_user上的 FK 也是正确的,但为什么要从您的用户对象中引用角色?我猜那将是一对一的? -
嗯,是的,我认为你是对的,我很困惑是否应该输入角色 ID。通常我使用一对多,但我改变了它。所以你认为我应该在我的用户表中推迟我的 role_id 吗?
-
是的,从您的用户表中删除该列。它对你的多对多关系没有用。 (当然也要去掉外键)。
-
我照你说的做,现在我得到了这个错误:[Illuminate\Database\QueryException] SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:alter table
role_useradd约束role_user_role_id_foreign外键(role_id)引用roles(id)在更新级联上删除级联)[PDOException] SQLSTATE [HY000]:一般错误:1215无法添加外键约束 -
如果我看到添加 FK 的顺序,用户表的 FK 正常吗?那么也许 Roles 表有问题?迁移的运行顺序是什么?
标签: laravel laravel-5 migration