【问题标题】:How to ignore unique validation rule on an email address on update function?如何在更新功能上忽略电子邮件地址的唯一验证规则?
【发布时间】:2016-03-09 10:50:33
【问题描述】:

我有一个表单,它在编辑页面中,其中包含字段名称电子邮件。现在我不想检查电子邮件验证,这是独一无二的。我已经在'email'=>'unique:users'之类的规则中进行了验证,这在创建页面上非常有效。所以我想在编辑页面上忽略该验证。而且我必须在更新函数的参数中使用像 FormRequest $request 这样的 FormRequest 类,它定义了表单字段验证的规则数组。

public function rules()
    {
        $business = BusinessModel::all();

        return[
                'companyName' =>'required',
                'address1'    =>'required',
                'pinCode'     =>'required|numeric',
                'city'        =>'required',
                'email'       =>'required|email|unique:users'.$id,
                'phoneNumber' =>'required|numeric|unique:business|size:10',
                'website'     =>'required|url',
                'contactname' =>'required',
                'designation' =>'required',
                'emailaddress'=>'required|email|unique:business',
                'phno'        =>'required|numeric',
              ];
      }

我们如何将 id 传递给 FormRequest 类中的规则函数..因为在这种情况下..它会向我显示错误,例如 $id is undefined
'email' =>'required|email|unique:users'.$id, [error undefined variable id]

【问题讨论】:

    标签: php mysql laravel-5


    【解决方案1】:

    只需传递当前记录的primary key,验证器将跳过表中的该行。

    'email'=>'unique:users,email,'.$id,

    其中,

    电子邮件是field name$id 是存储primary key 的变量。

    【讨论】:

    • 首先检查请求类型是否 POST=>Create 或 PATCH=>Update
    【解决方案2】:

    由于您使用的是 FormRequest 类,因此您无法直接使用 $id 变量。

    但是,相同的数据已经可以通过表单输入或路由参数提供给此类,具体取决于您的结构方式。

    因此,如果路由类似于 myapp/user/234,那么您可以使用 $this->route('user') 访问用户 ID

    这将使您的规则看起来像:

       public function rules()
        {
            $business = BusinessModel::all();
    
            return[
                    'companyName' =>'required',
                    'address1'    =>'required',
                    'pinCode'     =>'required|numeric',
                    'city'        =>'required',
                    'email'       =>'required|email|unique:users'.$this->route('user'),
                    'phoneNumber' =>'required|numeric|unique:business|size:10',
                    'website'     =>'required|url',
                    'contactname' =>'required',
                    'designation' =>'required',
                    'emailaddress'=>'required|email|unique:business',
                    'phno'        =>'required|numeric',
                  ];
          }
    

    或者,如果id 是表单字段的一部分而不是在路由中,您可以使用请求输入法$this->input('id') 访问它。

    有关这方面的完整文档可在以下位置找到:https://laravel.com/docs/5.6/requests#retrieving-input

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 2020-09-13
      • 1970-01-01
      • 2014-05-23
      • 2011-04-22
      • 2020-03-12
      • 1970-01-01
      • 2015-01-03
      • 2017-01-17
      相关资源
      最近更新 更多