Laravel动态规则的独特价值

时间:2015-11-18 13:18:47

标签: validation laravel unique

目前我正在使用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'])吗?

2 个答案:

答案 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

来源:http://laravel.com/docs/5.1/validation#rule-unique