Laravel-如何验证唯一规则请求是否区分大小写

时间:2020-04-03 09:03:56

标签: laravel validationrules

我的Laravel-5.8中有此规则

规则:创建

 public function rules()
 {
   return [
    'location_name' => [
        'required',
        'string',
        'min:3',
        'max:80',               
        Rule::unique('hr_work_locations', 'location_name', 'company_id')
    ],          

  ];
 }

规则:修改

 public function rules()
 {
    return [
    'location_name' => [
        'required',
        'string',
        'min:3',
        'max:80',               
        Rule::unique('hr_work_locations', 'location_name', 'company_id')->ignore($this->work_location)
    ],          
  ];
 }

根据规则,location_name对于每个公司(company_id)都是唯一的。同样在修改规则中,

ignore($ this-> work_location)

是路线

控制器:创建

public function store(StoreWorkLocationRequest $request)
{
  try {         
     $worklocation = HrWorkLocation::create([
        'location_name'     => $request->location_name,
        'is_active'         => 1,
     ]);

    Session::flash('success', 'Work Location is created successfully');
    return redirect()->route('hr.work_locations.index');
  } 
  catch (Exception $exception) 
  {
      Session::flash('error', 'Action failed!');
      return redirect()->route('hr.work_locations.index');  
   }        
  }

我观察到它允许location_name为英格兰或英国。

如何使Rule :: unique区分大小写?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以将输入变为小写,这样就不必担心用户在表单中输入的内容。

 Str::lower($request->location_name);

在那之后,您可以在没有名称空间前缀的情况下调用它:

{{1}}

答案 1 :(得分:0)

在boot()方法下向AppServiceProvider.php添加自定义验证:

df2.to_csv(output(os.path.join(name+'//_modified.csv'),sep=';',header=False,index=False)

可以进一步扩展以接受与唯一规则类似的其他参数 现在我的$ rules看起来像这样:

Validator::extend('iunique', function ($attribute, $value, $parameters, $validator) {
    $query = DB::table($parameters[0]);
    $column = $query->getGrammar()->wrap($parameters[1]);
    return ! $query->whereRaw("lower({$column}) = lower(?)", [$value])->count();
});

查看已报告here的问题