Laravel唯一规则集会忽略当前用户ID

时间:2019-02-26 14:45:43

标签: php laravel

我正在Laravel中更新用户,在这里我制定了以下验证规则来更新用户电子邮件:

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

这在我的表单请求中。 但是,当我发帖时,仍然说电子邮件已经被拿走了?这可能是Laravel最新版本中的错误吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

不,这不是bug,您将null值用作ID,因此将您的规则更改为此:

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

请确保您的方法中包含Request $request,并且您的控制器上还具有身份验证中间件。

答案 1 :(得分:0)

您设置了“忽略电子邮件”列,因此您应该传递的电子邮件不是id

source ~/.bashrc

答案 2 :(得分:0)

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

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);
    ...
    ...
}