Laravel - Как проверить уникальный запрос правила как чувствительный к регистру - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть эти Правила в моих 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 is уникальный для каждой компании (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 в качестве Англии или Англии.

Как сделать Rule :: уникальным с учетом регистра?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Добавление пользовательской проверки в AppServiceProvider. php в методе boot ():

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',
];

см. сообщение об ошибке здесь

0 голосов
/ 03 апреля 2020

Вы можете сделать ввод в нижнем регистре, чтобы вам не приходилось беспокоиться о том, что вводит пользователь в форме.

use Illuminate\Support\Str;

После этого вы можете вызывать его без префикса пространства имен:

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