Php Laravel unique规则集忽略当前用户id

Php Laravel unique规则集忽略当前用户id,php,laravel,Php,Laravel,我正在更新Laravel中的一个用户,在那里我为更新用户电子邮件制定了以下验证规则: "email" => "required|email|unique:users,email,".$this->route("user")->id, 这是我的申请表。 然而,当我发帖时,它仍然说电子邮件已经被接收了?这可能是Laravel最新版本中的一个bug吗 谢谢 不,这不是一个bug,您正在为id使用空值。因此,请将规则更改为: "email" => "required|e

我正在更新Laravel中的一个用户,在那里我为更新用户电子邮件制定了以下验证规则:

    "email" => "required|email|unique:users,email,".$this->route("user")->id,
这是我的申请表。 然而,当我发帖时,它仍然说电子邮件已经被接收了?这可能是Laravel最新版本中的一个bug吗


谢谢

不,这不是一个bug,您正在为id使用空值。因此,请将规则更改为:

"email" => "required|email|unique:users,email,".$this->user()->id,

确保您的方法中有Request$Request,并且控制器上有auth中间件。

您设置了ignore email列,因此应该传递email而不是id

"email" => "required|email|unique:users,email,".$this->route("user")->email,

首先,您必须在用户模型中添加规则

static function rules() {
    return [
        'email' => 'required|email'
    ];
}
在用户控制器中

use Illuminate\Validation\Rule; // add this one

function add_update_user(Request $request,$user_id) {
   $data = $request->all();
    unset($data['_token']);

    $rules = User::rules();
    $rules['email'] = explode('|', $rules['email']);
    if (isset($user_id))  // is old user, your get user_id in route
    {
       $rules['unique_code'][] = Rule::unique('databse_connection_name.users')->ignore($data['email'], 'email');
    } else  // is new user
    {
        $rules['email'][] = 'unique:databse_connection_name.users,email';
    }
    $validator = Validator::make($data, $rules);
    ...
    ...
}

我错了,规则是在表单请求中!我应该说明的!Sorrydd$this->routeuser->id显示了正确的值?您还没有向我们显示您用于访问此验证的路由,但是如果它类似于users/{user},那么表单请求中可用的用户id实际上是$this->routeuser,而不是$this->routeuser->id。