【问题标题】:Unique field validation issue in laravellaravel 中的唯一字段验证问题
【发布时间】:2020-08-02 11:54:21
【问题描述】:

我正在尝试验证我的 laravel 应用中的唯一条目

以下是我的验证数组,

$website = $websiteModel->find($id);

        $this->validate($request, [
            'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
            'subDomainSuffix' => ['required'], 
            'packageType' => ['required'],
            'themeid' => ['required'],
            'lang' => ['required'],
            'user' => ['required'],
            'domain' => [
                'required',
                'string',
                'min:2',
                'max:255',
                Rule::unique('apps')->ignore($website)
            ],
        ], $request->all());

我的验证工作正常但是,

当我尝试为我的域字段输入重复值时,它得到正确验证但未显示错误消息,说对不起名称已经存在...

<input type="text" id="domain" class="form-control" name="domain" >
{!! $errors->first('domain', '<span class="help-block" role="alert">:message</span>') !!}

在此范围内,它只显示常见错误消息区域,但它显示对不起表单无法更新...那么我怎样才能正确验证该字段并显示相关错误消息

【问题讨论】:

    标签: php laravel validation laravel-5 laravel-6


    【解决方案1】:

    做这样的事情:

    在插入请求时使用

    'domain' => [
       ...
       'unique:websites,domain'
    ]
    

    根据更新请求使用

    'domain' => [
       ...
       "unique:websites,domain,{$this->website->id}"
    ]
    

    或者

    'domain' => [
       ...
       Rule::unique('websites', 'domain')->ignore($this->website)
    ]
    

    【讨论】:

    • 对你的答案做了一个小改动,在更新行中,你的代码给了我一个错误,所以我把它改成了 Rule::unique('apps', 'domain')->ignore($网站),这对我有用。 :)。感谢您的指导。
    【解决方案2】:

    您将 $request->all() 作为验证消息传递。 请尝试:

    $website = $websiteModel->find($id);
    
            $request->validate([
                'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
                'subDomainSuffix' => ['required'], 
                'packageType' => ['required'],
                'themeid' => ['required'],
                'lang' => ['required'],
                'user' => ['required'],
                'domain' => [
                    'required',
                    'string',
                    'min:2',
                    'max:255',
                    Rule::unique('apps')->ignore($website)
                ],
            ]);
    

    【讨论】:

      【解决方案3】:

      你不需要在忽略规则中传递重复的列来指示验证器忽略网站域,除了它自己吗?比如像

      Rule::unique('apps')->ignore($website->id)
      

      【讨论】:

        【解决方案4】:

        请试试这个。它有助于解决您的问题

        在文件顶部使用异常和验证器

        use Exception;
        use Validator;

        $rules = [
                        'subDomainName' => 'required|unique:sub_domain_name',
                    ];
        
                    $validator = Validator::make($request->all(), $rules, $message);
                    if ($validator->fails()) {
                        throw new Exception(implode('\n', $validator->errors()->all()));
                    }

        sub_domain_name : 这是数据库列名

        【讨论】:

          猜你喜欢
          • 2019-03-24
          • 2020-07-07
          • 1970-01-01
          • 1970-01-01
          • 2018-08-09
          • 1970-01-01
          • 2014-03-09
          • 2023-03-20
          • 1970-01-01
          相关资源
          最近更新 更多