Modelo de actualización de Laravel con una regla de validación única para el atributo

Modelo de actualización de Laravel con una regla de validación única para el atributo

Problema

Tengo un modelo de usuario de Laravel donde agregué una regla de validación única sobre el nombre de usuario y el correo electrónico. Ahora, cuando actualizo a mi usuario a través de mi repositorio, y quiero volver a validar mi modelo, recibo un error. Así es como se ve mi método de actualización

Actualización de funciones públicas ($ id, $ data)
$ user = $ this-> findByid ($ id);
$ user-> relleno ($ data);
$ this-> validate ($ user-> toArray ());
$ user-> save ();
devolver $ usuario;

Esto falla en las pruebas con

ValidationException: "nombre de usuario": ["El nombre de usuario ya se ha tomado."],
"correo electrónico": ["El correo electrónico ya se ha tomado."]

¿Hay alguna forma de arreglar esto con elegancia??

Solución

Este es un error común en Laravel cuando está actualizando algo. Por defecto, requerirá ID como clave para que coincida con la entrada existente. Entonces, lo que debe hacer es agregar la identificación de la instancia que se actualiza actualmente al validador.

Pase la identificación de su instancia para ignorar el validador único.
En el validador, use un parámetro para detectar si está actualizando o creando el recurso.
Si se actualiza, obliga a la regla única a ignorar una identificación dada:

// reglas de validación
'Correo electrónico' => 'único: usuarios, correo electrónico_address', ' . $ INSERMED,
Si crea, continúe como de costumbre:
// reglas de validación
'Correo electrónico' => 'único: usuarios, correo electrónico_address',