Laravel 唯一值的动态规则
Laravel dynamic rule for unique value
目前我正在为我的一个项目使用 Laravel。对于给定的对象(用户组),我已经设置了控制器、模型和 CreateUserGroupRequest。 Request 对象有一个简单的规则:
public function rules()
{
return [
'name' => 'required|unique:user_groups|min:3'
];
}
当我试图更新任何给定的用户组时,如果我不更改名称,它就会失败。显然,这是因为该名称本身已被使用。我应该如何动态设置 "ignore_id" ?或者我应该在所有更新方法中使用 $this->validtor($request, ['name' => 'required|unique:user_groups:' . $usergroup->id . '|min:3'])
吗?
我认为您需要 laravel 文档中的这一部分:
强制唯一规则忽略给定 ID:
有时,您可能希望在唯一性检查期间忽略给定的 ID。例如,考虑一个包含用户姓名、电子邮件地址和位置的 "update profile" 屏幕。当然,您需要验证电子邮件地址是否唯一。但是,如果用户只更改名称字段而不更改电子邮件字段,您不希望抛出验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供的电子邮件地址已被其他用户使用,您只想抛出验证错误。要告诉唯一规则忽略用户的 ID,您可以将 ID 作为第三个参数传递:
'email' => 'unique:users,email_address,'.$user->id
在 mark 的回答 () 的帮助下,我找到了解决方案。在我的 CreateUserGroupRequest(已重命名为 UserGroupRequest,因为它现在用于创建和编辑)中,我引用了 $id(我来自 PATCH 路由的标识变量,/usergroup/1 和 $id = 1)这也是在请求中。我什至不知道那是可能的。
public function rules()
{
return [
'name' => 'required|unique:user_groups,name,' . $this->segment(2) . ':|min:3'
];
}
目前我正在为我的一个项目使用 Laravel。对于给定的对象(用户组),我已经设置了控制器、模型和 CreateUserGroupRequest。 Request 对象有一个简单的规则:
public function rules()
{
return [
'name' => 'required|unique:user_groups|min:3'
];
}
当我试图更新任何给定的用户组时,如果我不更改名称,它就会失败。显然,这是因为该名称本身已被使用。我应该如何动态设置 "ignore_id" ?或者我应该在所有更新方法中使用 $this->validtor($request, ['name' => 'required|unique:user_groups:' . $usergroup->id . '|min:3'])
吗?
我认为您需要 laravel 文档中的这一部分: 强制唯一规则忽略给定 ID:
有时,您可能希望在唯一性检查期间忽略给定的 ID。例如,考虑一个包含用户姓名、电子邮件地址和位置的 "update profile" 屏幕。当然,您需要验证电子邮件地址是否唯一。但是,如果用户只更改名称字段而不更改电子邮件字段,您不希望抛出验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供的电子邮件地址已被其他用户使用,您只想抛出验证错误。要告诉唯一规则忽略用户的 ID,您可以将 ID 作为第三个参数传递:
'email' => 'unique:users,email_address,'.$user->id
在 mark 的回答 (
public function rules()
{
return [
'name' => 'required|unique:user_groups,name,' . $this->segment(2) . ':|min:3'
];
}