目前我正在使用Laravel进行我的一个项目。对于给定的对象(用户组),我已经设置了Controller,Model和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'])
吗?
答案 0 :(得分:1)
借助马克的答案(Laravel 5 Validation unique pass variable placeholder),我找到了解决方案。在我的CreateUserGroupRequest(已经重命名为UserGroupRequest,因为它现在用于创建和编辑)我正在引用$ id(我的PATCH路由中的标识变量,/ usergroup / 1和$ id = 1),这也是请求。我不知道那里甚至可能。
public function rules()
{
return [
'name' => 'required|unique:user_groups,name,' . $this->segment(2) . ':|min:3'
];
}
答案 1 :(得分:0)
我认为你需要laravel文档中的这一部分: 强制唯一规则忽略给定ID:
有时,您可能希望在唯一检查期间忽略给定的ID。例如,考虑一个“更新配置文件”屏幕,其中包括用户的名称,电子邮件地址和位置。当然,您需要验证电子邮件地址是否唯一。但是,如果用户仅更改名称字段而不更改电子邮件字段,则不希望抛出验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供已由其他用户使用的电子邮件地址,您只想抛出验证错误。要告诉唯一规则忽略用户的ID,您可以将ID作为第三个参数传递:
'email' => 'unique:users,email_address,'.$user->id