#laravel #validation #unique #rules
#laravel #валидация #уникальный #Правила #проверка
Вопрос:
Мне нужно проверить, существует ли поле уже, выдает ошибку, но с этим кодом ошибки не возникают
Laravel 7
table: departamento
column: id int incremental
column: departamento varchar(150)
column: idPais int
метод сохранения
$this->validate($request, ['departamento' => Rule::unique('departamento','idPais')->where('departamento',$request->depto)->where('idPais',$request->pais)]);
Попробуйте и с этим
$rules = [
'depto' => [Rule::unique('departamento')->where(function ($query) use ($request) {
return $query->where('departamento','=', $request->depto)->where('idPais','=', $request->pais);
}),]
];
$this->validate($request,$rules);
с помощью этого кода выдается эта ошибка
$rules = [
'depto' => [Rule::unique('departamento')->where(function ($query) use ($request) {
return $query->where('departamento','=', $request->depto)->where('idPais','=', $request->pais);
}),]
];
$this->validate($request,$rules);
Спасибо!!!
Редактировать:
Мой плохой, мне нужно проверить два поля, departamento и idPais, спасибо.
Комментарии:
1. Так что в принципе
departmento
должно быть уникальным? Как idPais связан с этим?
Ответ №1:
Это происходит из-за вашего имени поля. Уникальное правило попытается найти запись, для имени столбца которой задано значение запроса (в вашем случае, depto
но ваше имя столбца departamento
). Когда вы настраиваете запрос, вы не переопределяете его, вы добавляете поверх этого поведения по умолчанию. Из документов laravel:
По умолчанию уникальное правило проверяет уникальность столбца, соответствующего имени проверяемого атрибута. Однако вы можете передать другое имя столбца в качестве второго аргумента уникального метода:
Имея это в виду, вы могли бы либо изменить уникальное правило, чтобы установить для столбца значение departamento
, а не depto
, как указано ниже, либо изменить departamento
атрибут запроса на отправку вместо depto
:
$rules = [
'depto' => [Rule::unique('departamento', 'departamento')->where(function ($query) use ($request) {
return $query->where('idPais','=', $request->pais);
}),]
];