Como criar uma regra de validação personalizada para 4 colunas combinadas únicas
Como o padrão do Laravelunique:tablename
regra de validação permite apenas duas colunas; em cenários em que mais de duas colunas são únicas, lança diretamente oQueryException
comSQLSTATE errorcode 23000. Como solução temporária, estou capturando a exceção e lançando um aviso como este:
try{
//My query that might throw an exception for a duplicate entry
} catch (\Exception $e){
return $e->getCode() == 23000 ?
redirect()->back()->with('warning','Duplicate entry') :
redirect()->back()->with('error','Unknown Error Occurred');
}
O problema é que, para todos os outros cenários em que o código de erro não é 23000, apenas uma mensagem de erro será exibida.Unknown Error Occurred
ao invés deOps. Claramente, a depuração será um pesadelo.
Então, eu procurei alternativas. Eu tive que escolher uma das duas opções: a) Use umpacote de terceiros ou b) Crie umregra de validação customizada
Eu escolhi a opção b. Mas estou lutando com a maneira de construir um eu mesmo. Quando observei um exemplo (para regra inline única):
$validator = Validator::make($request->all(), [
'title' => [
'required',
'max:255',
function($attribute, $value, $fail) {
if ($value === 'foo') {
return $fail($attribute.' is invalid.');
}
},
],
]);
... Percebi que a regra pode ser aplicada a um único atributo e valor. Mas eu tenho 4 atributos e valores para verificar se eles são realmente uma entrada única. Como eu posso fazer isso?