【问题标题】:Integrity constraint violation: 1062 Duplicate entry for email完整性约束违规:1062 电子邮件重复条目
【发布时间】:2021-07-07 06:48:21
【问题描述】:

我已经完成了一个 Laravel 项目,用户可以使用姓名电子邮件密码更新他们的个人资料 在更新用户个人资料时,我收到 Integrity constraint violation: 1062 Duplicate entry 与电子邮件, 在用户表中电子邮件是唯一的...我如何使用“电子邮件已被占用”消息处理此错误,这样就不会引发查询异常错误 这是我的刀片文件

    <div class="form-group row">
        <label for="exampleInputEmail1" class="col-sm-2 col-form-label">
            Email
        </label>
        <div class="col-sm-10">
            <input type="email" class="form-control" id="exampleInputEmail1" value="{{ (isset($user_update)) ? pdate->email : '' }}" name="email" placeholder="Enter Your Email Here">
        </div>
        @error('email')
            <span class="invalid-feedback" role="alert">
                <strong>
                   {{ $message }}
                </strong>
            </span>
        @enderror
    </div>

这是我的用户更新方法的控制器

    public function update(UpdateRequestUser $request, User $user) {
        $password=Auth::user()->password;
        $oldpassword=$request->old_password;
        $newpassword=$request->new_password;
        $confirmpassword=$request->confirm_password;
        if(Hash::check($oldpassword, $password)) {
            if($newpassword===$confirmpassword) {
                $user = Auth::user();

                $user->password=Hash::make($newpassword);
                $user->name=$request->name;
                $user->email=$request->email;
                $user->save();
                Auth::logout();
                toastr()->success('password changed successfully');
                return redirect()->route('login');
            } else {
                toastr()->info('password missmatch');
                return redirect()->back();
            }
        }
        if(!(Hash::check($oldpassword, $password))) {
            toastr()->info('Old password  missmatch');
            return redirect()->back();
        }
        //
    }

我的验证请求规则是

    return [
        'name'=>'required',
        'email'=>'required',
        'confirm_password'=>'required',
        'new_password'=>'required',
        'old_password'=>'required',
        //
    ];

我想以电子邮件已被接收的形式显示错误消息,以便我的运行时项目将来不会显示查询异常... 配置文件更新方法在不更新电子邮件的情况下工作正常...我只想显示上面提到的错误消息

【问题讨论】:

  • 'email'=&gt;'required|unique', 这里 unique 在验证中缺失
  • 我明白你想说什么......添加 **'email'=>'required|unique 将按预期抛出错误消息......使用该用户甚至无法更新他们的姓名密码
  • ** 'email' => 'required|unique:users,email,'.$this->route('user')->id ** 将其更改为验证已解决此问题

标签: php laravel controller laravel-blade


【解决方案1】:

您好,我认为您的带有验证方法的请求类可能是这样的

 public function rules()
    {
        return [
            'name' => ['required', 'max:50'],
            'email' => ['required', 'max:50', 'email', Rule::unique('users')],
            'confirm_password'=>'required',
            'new_password'=>'required',
            'old_password'=>'required',
        ];
    }

【讨论】:

    【解决方案2】:

    根据最新版本的 Laravel (v8) 你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2016-05-23
      • 2015-05-18
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多