2017-02-08 1 views
7

Как я могу получить уникальное правило проверки на 2 поля?Проверка достоверности формы Laravel с использованием двух полей

a. Приложение не должно позволять двум людям иметь одинаковое имя и фамилию.

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

b. Но если пользователь вводит только первое имя (Глен), ни один другой человек в таблице не должен иметь то же самое (имя name = 'Glen' и фамилия = null). другой «Глен Смит» хорошо.

Я пробовал следующее правило. Он отлично работает, когда оба поля (имя и фамилия) не являются нулевыми:

'firstName' => 'unique:people,firstName,NULL,id,lastName,' . $request->lastName 

Это правило не работает на b. когда имеется только одно поле.

Подсказка?

ответ

7

Встроенный в unique валидатор не будет действительно поддерживать то, что вы пытаетесь сделать. Цель состоит в том, чтобы убедиться, что единственная действительная уникальная в базе данных, а не составная из двух значений. Тем не менее, вы можете создать custom validator:

Validator::extend('uniqueFirstAndLastName', function ($attribute, $value, $parameters, $validator) { 
    $count = DB::table('people')->where('firstName', $value) 
           ->where('lastName', $parameters[0]) 
           ->count(); 

    return $count === 0; 
}); 

Вы можете получить доступ к этому новое правило с:

'firstName' => "uniqueFirstAndLastName:{$request->lastName}" 

Вы, вероятно, найдете вы, возможно, потребуется изменить запрос к базе данных немного, как это непроверенный ,

+1

отлично работает из коробки :) Спасибо большое! – Warrio

+1

при проверке формы обновления нам нужно исключить текущую запись, добавив дополнительное предложение where: -> где ('id', '<>', $ parameters [1]) и называть его так ' firstName '=> "uniqueFirstAndLastName: {$ request-> lastName}, {$ request-> id}" – Warrio

 Смежные вопросы

  • Нет связанных вопросов^_^