【问题标题】:Laravel - How to validate Unique Rule Request as case sensitiveLaravel - 如何验证唯一规则请求是否区分大小写
【发布时间】:2020-07-15 10:02:35
【问题描述】:

我的 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) 都是唯一的。同样在编辑规则中,

忽略($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 作为 England 或 england。

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

谢谢。

【问题讨论】:

    标签: laravel validationrules


    【解决方案1】:

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

    use Illuminate\Support\Str;
    

    之后,你可以不带命名空间前缀来调用它:

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

    【讨论】:

      【解决方案2】:

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

      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();
      });
      

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

      protected $rules = [
          'username' => 'required|alpha_dash|min:5|max:18|iunique:users,username',
      ];
      

      查看报告的问题here

      【讨论】:

        猜你喜欢
        • 2018-10-17
        • 2015-02-27
        • 1970-01-01
        • 2018-06-26
        • 2021-11-05
        • 2018-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多