Проверка Laravel - проверка активных дубликатов электронных писем - PullRequest
0 голосов
/ 15 ноября 2018

Структура таблицы:

users: id  - email - active

Я хочу проверять дублирующую электронную почту, только когда active равен 0.

Для всех электронных писем я делаю это:

'email' => 'required|unique:users|email',

Можно ли определить условие при проверке?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Правило unique имеет следующие параметры:

таблица [, столбец [, игнорировать значение [, игнорировать столбец [, где столбец, где значение] ...]]]

Так что-то подобное будет работать без издержек закрытия или другого пользовательского правила.(Я использую формат массива, потому что его легче читать, удобнее для VCS, и Laravel все равно просто разбивает строку.)

'email' => [
   'required',
   'email',
   'unique:users,email,null,null,active,0',
],

Я установил столбец игнорирования и значение null, так как ничего не игнорировалосьв вашем оригинальном вопросе.Однако, если вы выполняете эту проверку как при обновлении, так и при создании, вам следует игнорировать идентификатор обновляемого пользователя.

0 голосов
/ 15 ноября 2018

Как насчет использования закрытия валидатора?

public function store(Request $request)
{
   $this->validate($request, [
       'email' => [
           'required',
           'email',
           function ($attribute, $value, $fail) {
               if (Users::whereEmail($value)->whereActive(0)->count() > 0) {
                   $fail($attribute.' is already used.');
               }
           },
       ]);
   }
}
...