Laravel 5 更新验证电子邮件需要是唯一的

Posted

技术标签:

【中文标题】Laravel 5 更新验证电子邮件需要是唯一的【英文标题】:Laravel 5 Update Validation email needs to be unique 【发布时间】:2019-01-26 11:44:58 【问题描述】:

我正在尝试以管理员身份更新用户。

我正在更改用户名,但它说电子邮件必须是唯一的。

我该如何解决这个问题。

public function update($id, PutUser $request)

if (auth()->id() == $id) 
    return redirect()->back()->withFlashDanger('Permission Denied, You can not edit own profile here.');


$user = User::find($id);


$user->update((array_merge($request->validated(), ['county' => request('county')])));

//Update model_has_roles model with assignees_roles



return redirect()->route('users.index')->withFlashSuccess(trans("alerts.users.updated"));

这是请求类

     public function authorize()
     
         return true;
     

     public function rules()
     
         $user_id =  $this->input('id');

         return [
           'name' => 'required|string',
           'username' => 'required',
           'email' => 'required|email|unique:users,email'.$user_id,
           'gender' => 'required',
           'phone' => 'sometimes|numeric',
           'address' => 'sometimes|string',
           'country_id' => 'required',
         ];
     

我不断收到失败的电子邮件验证。 '电子邮件已被占用'。任何想法

【问题讨论】:

我已尝试回答您的问题。它解决了你的问题吗?如果是,请将此问题标记为已解决。 【参考方案1】:

您在验证中email 标签后缺少逗号:

return [
    'name' => 'required|string',
    'username' => 'required',
    'email' => 'required|email|unique:users,email,'.$user_id,
    'gender' => 'required',
    'phone' => 'sometimes|numeric',
    'address' => 'sometimes|string',
    'country_id' => 'required',
];

从 Laravel 5.3(我相信)开始,您还可以使用规则构建器来获得更具描述性的验证规则。这些更适合人类阅读和解释,因此会降低错误率:

use Illuminate\Validation\Rule;

return [
    'email' => [
        'required',
        Rule::unique('users', 'email')->except($user_id),
    ]
];

https://medium.com/@tomgrohl/why-you-should-be-using-rule-objects-in-laravel-5-5-c2505e729b40

【讨论】:

以上是关于Laravel 5 更新验证电子邮件需要是唯一的的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 laravel 表单请求更新数据时验证电子邮件的唯一性?

Laravel 4 表单验证在更新表单上应该是唯一的,但如果是当前的则不是

Laravel更新模型,具有属性的唯一验证规则

Laravel 5.7:通过 AWS SES 的按需电子邮件通知将我的收件人电子邮件视为发件人电子邮件,并希望它是经过验证的地址

Laravel 检查没有自身更新的唯一规则

Laravel 验证唯一规则反射类异常