使列值仅对一个用户唯一,而其他用户也只能有一次相同的值



我有一个选项,允许每个用户创建自己的配置文件类别。我希望允许user Auser B具有cats类别,但我不希望用户A能够具有他已经具有的另一个类别,因此名称和段塞必须仅对他的配置文件唯一,这样所有用户都可以具有cats类别,但同一用户不能具有重复的cats类别。

我的分类表

public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->constrained()
->onUpdate('cascade')
->onDelete('cascade');
$table->string('name');
$table->string('slug');
$table->timestamps();
});
}

是否只允许在验证中使用?如果是,如何编写该规则的验证?此列必须是仅对此用户唯一的值,但其他用户的配置文件中可以具有相同的值。

如果要确保用户没有重复的类别名称,则需要确保user_id+name对在categories表中是唯一的。

为了做到这一点,您需要为这两列定义复合唯一键

$table->unique(["user_id", "name"]);

这样,数据库将不允许任何user_id具有多个具有相同名称的类别

最新更新