首页 > 解决方案 > 如何在使用 laravel 表单请求更新数据时验证电子邮件的唯一性?

问题描述

我正在使用表单请求将数据验证为更新方法。我正在尝试将电子邮件验证为唯一值,期望像这样请求用户电子邮件

 public function rules() {
    $user = $this->user();
    return [
        'name'       => 'required|max:255|string',
        'email'      => 'required|email|max:255|unique:users,email,'.$user->id,
        'restaurant' => 'required',

    ];
}

但它不起作用,如何将请求的用户 ID 访问到表单请求中?

标签: mysqllaravelvalidationlaravel-formrequest

解决方案


我将假设您正在发布一个用户对象,其中id包含在您的$request数据中。

如果您要存储新记录并且电子邮件需要可用,您可以使用:

use Illuminate\Validation\Rule;
...
public function rules() {
    return [
        'name'  => 'required|max:255|string',
        'email' => ['required', 'email', 'max:255', Rule::unique('users')],
        'restaurant' => 'required',
    ];
}

如果您想忽略您的用户-> id,因为您正在更新您的记录并且显然电子邮件是由用户接收的:

use Illuminate\Validation\Rule;
...
public function rules() {
    return [
        'name'  => 'required|max:255|string',
        'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($this->id)],
        'restaurant' => 'required',
    ];
}

推荐阅读