Как предотвратить вставку электронной почты, если она уже существует с определенным идентификатором в laravel?
У меня есть таблица, в которой я пытаюсь хранить адреса электронной почты. Эти адреса электронной почты будут сохранены с user_id
,
Например в email_list
Таблица
|ID | user_id | email |
...............................
| 1 | 101 | john@gmail.com |
...............................
| 2 | 102 | john@gmail.com |
В приведенной выше таблице вы можете увидеть те же адреса электронной почты, сохраненные с разными user_id
Вот что я пытаюсь сделать.
В настоящее время я пытаюсь выполнить простую проверку Laravel, как это.
'email' => 'required|unique:email_list|email',
Так есть ли способ проверить уже существующие адреса электронной почты, если строка имеет тот же user_id
? Я использую Laravel 5.2. Я хотел бы оценить, если кто-то направляет меня. Спасибо
Отредактировано через 3 часа
Я также добавляю тот же вопрос в github, что и проблема. Человек говорит, что я должен создать собственное правило проверки.
2 ответа
Принуждение уникального правила игнорировать данный идентификатор
Вы можете указать ID, который будет игнорироваться, в качестве необязательного третьего параметра. Кроме того, если ваша таблица использует имя столбца первичного ключа, отличное от id, вы можете указать его как необязательный четвертый параметр
'email' => "unique:{$table},{$field},{$user->id},{$idField}"
Так что в вашем случае это было бы следующим
'email' => "unique:email_list,email,{$user->id},user_id'
Это против существующего правила.
Прежде всего, проверка существующего правила, основанная на условии, являются ли поля доступными или нет.
Я думаю, если мы использовали это как противоположность, то это полезно для вас.
Пример:-
'email' => 'exists:email_list,email,user_id,!102'
т.е.
'email' => 'exists:email_list,email,user_id,!'. $user_id
иначе,
'email' => 'exists:email_list,email,user_id,!'. Input::get(user_id)
при использовании ввода и импорта
use Illuminate\Support\Facades\Input;
и изменить содержание сообщения
Пожалуйста, попробуйте это и ответьте, что случилось.. или это работает для вас..?