Laravel 5.4 验证请求,如何处理更新时的唯一验证?

Posted

技术标签:

【中文标题】Laravel 5.4 验证请求,如何处理更新时的唯一验证?【英文标题】:Laravel 5.4 Validation Request , How to handle unique validation on update? 【发布时间】:2018-06-05 01:53:09 【问题描述】:

我有一个用户表,其中有一个关于电子邮件和用户名的唯一验证规则。当我尝试更新时,不要忽略唯一验证。请在下面查看我的代码。

UserRequest.php

public function rules()

    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];

【问题讨论】:

你用过$id,它是从哪里来的? 你解决了吗? 【参考方案1】:

请试试这个

public function rules()


    $id = $this->request->get('id') ? ',' . $this->request->get('id') : '';

    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];

【讨论】:

【参考方案2】:

在 laravel 5.5 中你应该这样做:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);

查看关于 rule-unique 的 laravel 文档。

【讨论】:

【参考方案3】:

如果您验证更新,则需要跳过id,如下所示

public function rules($id='')

    $id = $id ? ','.$id.',id':'';
    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];

在 Laravel docs 中,您在 unique 规则中提供了 3rd4th 参数

unique:table,column,except,idColumn

【讨论】:

@Sandeep :您是否将$id 发送到规则函数?【参考方案4】:

你可以这样使用:

$id = $this->isMethod('put') ? ',' . auth()->id() : '';

假设您使用put 方法进行更新

return行之前

【讨论】:

【参考方案5】:

其他人面临这个问题:

public function rules()
 
    return [
    'name' => 'required',
    'mobile' => 'required',
    'email' => 'required|unique:users,email'.$this->user->id,
    'usercategory' => 'required',
    'username' => 'required|unique:users,username'.$this->user->id,
            ];
  

【讨论】:

【参考方案6】:

我用这个解决了这个问题:

public function rules()

    $id = $this->user->id ?? null;

    return [
        "name" => "required",
        "mobile" => "required",
        "email" => "required|unique:users,email, $id",
        "usercategory" => "required",
        "username" => "required|unique:users,username, $id",
    ];

请注意,对于除 User 模型之外的其他模型,$this->user->id 中的用户将是小写的模型名称

【讨论】:

以上是关于Laravel 5.4 验证请求,如何处理更新时的唯一验证?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 请求验证正则表达式,不需要

如何处理 Firebase 中过期的用户 ID 令牌?

el-upload上传时的文件类型和大小限制失效,如何处理?

验证数组中的 Laravel 嵌套规则

如何处理 Cognito 上的令牌过期问题

一般如何处理 CXF 请求处理程序中的输入参数?