【问题标题】:Laravel 5.4 Validation Request , How to handle unique validation on update?Laravel 5.4 验证请求,如何处理更新时的唯一验证?
【发布时间】:2023-03-27 17:38:01
【问题描述】:

我有一个用户表,其中有一个关于电子邮件和用户名的唯一验证规则。当我尝试更新时,不要忽略唯一验证。请在下面查看我的代码。

UserRequest.php

public function rules()
{
    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];
}

【问题讨论】:

  • 你用过$id,它是从哪里来的?
  • 你解决了吗?

标签: laravel validation laravel-5 laravel-5.4 laravel-validation


【解决方案1】:

请试试这个

public function rules()
{

    $id = $this->request->get('id') ? ',' . $this->request->get('id') : '';

    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];
}

【讨论】:

    【解决方案2】:

    在 laravel 5.5 中你应该这样做:

    use Illuminate\Validation\Rule;
    
    Validator::make($data, [
        'email' => [
            'required',
            Rule::unique('users')->ignore($user->id),
        ],
    ]);
    

    查看关于 rule-unique 的 laravel 文档。

    【讨论】:

      【解决方案3】:

      如果您验证更新,则需要跳过id,如下所示

      public function rules($id='')
      {
          $id = $id ? ','.$id.',id':'';
          return [
              'name' => 'required',
              'mobile' => 'required',
              'email' => 'required|unique:users,email'.$id,
              'usercategory' => 'required',
              'username' => 'required|unique:users,username'.$id,
          ];
      }
      

      在 Laravel docs 中,您在 unique 规则中提供了 3rd4th 参数

      unique:table,column,except,idColumn
      

      【讨论】:

      • @Sandeep :您是否将$id 发送到规则函数?
      【解决方案4】:

      你可以这样使用:

      $id = $this->isMethod('put') ? ',' . auth()->id() : '';
      

      假设您使用put 方法进行更新

      return行之前

      【讨论】:

        【解决方案5】:

        其他人面临这个问题:

        public function rules()
         {
            return [
            'name' => 'required',
            'mobile' => 'required',
            'email' => 'required|unique:users,email'.$this->user->id,
            'usercategory' => 'required',
            'username' => 'required|unique:users,username'.$this->user->id,
                    ];
          }
        

        【讨论】:

          【解决方案6】:

          我用这个解决了这个问题:

          public function rules()
          {
              $id = $this->user->id ?? null;
          
              return [
                  "name" => "required",
                  "mobile" => "required",
                  "email" => "required|unique:users,email, $id",
                  "usercategory" => "required",
                  "username" => "required|unique:users,username, $id",
              ];
          }
          

          请注意,对于除 User 模型之外的其他模型,$this->user->id 中的用户将是小写的模型名称

          【讨论】:

            猜你喜欢
            • 2019-11-11
            • 1970-01-01
            • 2023-04-06
            • 2020-02-18
            • 2014-06-28
            • 2018-07-05
            • 2014-08-20
            • 1970-01-01
            • 2018-03-28
            相关资源
            最近更新 更多