Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.12.2018 01:29:31

Как сделать правило валидации на проверку 2 полей за раз?

Допустим, есть форма с 2 селектами на создание связи между человеком и машиной(то есть для промежуточной таблицы между ними). Нужно сделать проверку, что бы нельзя было создать связь между машиной и человеком, у которых уже создана запись в промежуточной таблице.


Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20

Не в сети

#2 01.12.2018 09:10:16

Re: Как сделать правило валидации на проверку 2 полей за раз?

Сначала создать миграцию на уникальный ключ для всех этих полей, в совокупности. Потом, видимо, в метод, который запись создает, либо включить обработчик этой ошибки (ее вернет база при попытке создания такой записи), либо корректно обработать блок исключений.

Изменено Androbim (01.12.2018 09:22:38)

Не в сети

#3 01.12.2018 12:39:42

Re: Как сделать правило валидации на проверку 2 полей за раз?

А как? Валидатор принимает массив, где на каждое поле устанавливаются правила, а мне по сути нужно чтоб была проверка сразу 2 полей. По-идее, конечно, можно проводить валидацию, а после него отдельно брать значение 2 полей и смотреть есть ли запись в промежуточной таблице, что бы потом занести в массив ошибок конкретно эту ошибку. Но может всё-таки в валидатор такую проверку можно засунуть?

https://laravel.com/docs/5.7/validation как Using Closures в офиц документации на создание ф-ции для валидации, но чтоб сразу 2 поля в ней можно было прописать.


Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20

Не в сети

#4 01.12.2018 12:51:41

Re: Как сделать правило валидации на проверку 2 полей за раз?


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 01.12.2018 13:00:05

Re: Как сделать правило валидации на проверку 2 полей за раз?

А как? Валидатор принимает массив, где на каждое поле устанавливаются правила, а мне по сути нужно чтоб была проверка сразу 2 полей.

Ошибка вставки некорректрной записи, в данном случае, сработает на уровне БД, потому что правила уникального ключа, установленного на несколько полей, не дадут вставить идентичную запись. Базе нет никакого дела до валидатора, ее установки приоритетны, можно вообще ничего на уровне PHP не проверять. А вот после того, как БД запретит вставку, в программу вернется исключение, которое нужно просто корректно обработать, наверное, лучше в блоке try-catch.
Но это лишь вариант. Как вижу, выше предлагается, как раз, решать вопрос на уровне валидатора.

Не в сети

Подвал раздела