Modelo de atualização do Laravel com regra de validação exclusiva para atributo

Modelo de atualização do Laravel com regra de validação exclusiva para atributo

Problema

Eu tenho um modelo de usuário do Laravel que adicionei uma regra de validação exclusiva sobre nome de usuário e e -mail. Agora, quando eu atualizo meu usuário através do meu repositório, e quero re-validar meu modelo, recebo um erro. É assim que meu método de atualização se parece

Atualização de função pública ($ id, $ dados)
$ user = $ this-> findbyId ($ id);
$ user-> preenchimento ($ dados);
$ this-> validate ($ user-> toArray ());
$ user-> save ();
retornar $ usuário;

Isso falha em testar com

ValidationException: "Nome de usuário": ["O nome de usuário já foi levado."],
"Email": ["O email já foi levado."]

Existe uma maneira de consertar isso elegantemente?

Solução

Este é um erro comum em Laravel sempre que você estiver atualizando qualquer coisa. Por padrão, exigirá o ID como uma chave para corresponder à entrada existente. Então, o que você precisa fazer é anexar o ID da instância atualmente sendo atualizado para o validador.

Passe o ID da sua instância para ignorar o validador exclusivo.
No validador, use um parâmetro para detectar se você está atualizando ou criando o recurso.
Se atualizar, force a regra única a ignorar um determinado ID:

// Regras de validação
'Email' => 'único: usuários, email_address,' . $ userID,
Se criar, prossiga como de costume:
// Regras de validação
'Email' => 'exclusivo: usuários, email_address',