【问题标题】:Laravel dynamic rule for unique valueLaravel 动态规则的唯一值
【发布时间】:2016-02-20 06:06:00
【问题描述】:

目前我正在将 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'])

【问题讨论】:

  • 您可以只删除“必需”,因此您的数据不需要设置名称,但如果需要,则适用以下规则?

标签: validation laravel unique


【解决方案1】:

我认为您需要 laravel 文档中的这一部分: 强制使用唯一规则忽略给定 ID:

有时,您可能希望在唯一检查期间忽略给定的 ID。例如,考虑一个包含用户名、电子邮件地址和位置的“更新配置文件”屏幕。当然,您需要验证电子邮件地址是否唯一。但是,如果用户只更改名称字段而不更改电子邮件字段,则您不希望引发验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供的电子邮件地址已被其他用户使用,您只想抛出验证错误。要告诉唯一规则忽略用户的 ID,您可以将 ID 作为第三个参数传递:

'email' => 'unique:users,email_address,'.$user->id

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

【讨论】:

  • 感谢您的回复,但我认为我只能在方法本身中使用它(正如我所提到的),而不是在我尝试重用我的 CreateUserGroupRequest 类时。还是有什么神奇的方法可以将用户组(或任何数据库获取的行)扔给 Request 对象?
  • 我不明白你的意思,如果你在CreateUserGroupRequest中有数据并且你的表有雄辩的模型,为什么你不能相互连接这个日期
  • 因为代码驻留在另一个文件中,并且请求首先得到验证,如果它在任何时候失败,我的控制器更新方法中的代码永远不会执行。因此我认为我必须以某种方式将用户组对象传递给自定义请求类。但我找到了答案的介绍并发布了它。感谢您与我一起思考!
【解决方案2】:

在马克的回答 (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'
    ];
}

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 2018-05-24
    • 1970-01-01
    • 2015-07-09
    • 2015-08-27
    • 2019-11-15
    • 2016-04-08
    • 2019-09-21
    • 2020-03-16
    相关资源
    最近更新 更多