Modello di aggiornamento di Laravel con regola di validazione unica per l'attributo

Modello di aggiornamento di Laravel con regola di validazione unica per l'attributo

Problema

Ho un modello utente Laravel che ho aggiunto una regola di convalida unica sul nome utente ed e -mail. Ora, quando aggiorno il mio utente tramite il mio repository e voglio convalidare il mio modello, ricevo un errore. Ecco come appare il mio metodo di aggiornamento

Aggiornamento della funzione pubblica ($ id, $ dati)
$ user = $ this-> findById ($ id);
$ utente-> riempimento ($ dati);
$ this-> Convalida ($ user-> toArray ());
$ utente-> salva ();
restituire $ utente;

Questo fallisce nei test con

ValidationException: "nome utente": ["Il nome utente è già stato preso."],
"Email": ["L'e -mail è già stata presa."]

C'è un modo per ripararlo elegantemente?

Soluzione

Questo è un errore comune in Laravel ogni volta che si aggiorna qualcosa. Per impostazione predefinita richiederà l'ID come chiave per abbinare la voce esistente. Quindi quello che devi fare è aggiungere l'ID dell'istanza attualmente aggiornata al validatore.

Passa l'ID della tua istanza per ignorare il validatore univoco.
Nel validatore, utilizzare un parametro per rilevare se si sta aggiornando o creando la risorsa.
In caso di aggiornamento, costringere la regola univoca a ignorare un determinato ID:

// Regole di convalida
'email' => 'univoco: utenti, email_address,' . $ userid,
Se crei, procedi come al solito:
// Regole di convalida
'email' => 'univoco: utenti, email_address',