Laravel oppdateringsmodell med unik valideringsregel for attributt

Laravel oppdateringsmodell med unik valideringsregel for attributt

Problem

Jeg har en Laravel -brukermodell som jeg la til unik valideringsregel på brukernavn og e -post. Når jeg oppdaterer brukeren min gjennom repoen min, og jeg vil validere modellen min, får jeg en feil. Slik ser oppdateringsmetoden min ut

offentlig funksjonsoppdatering ($ id, $ data)
$ bruker = $ this-> findById ($ id);
$ bruker-> Fyll ($ data);
$ this-> validerer ($ bruker-> toarray ());
$ bruker-> lagre ();
Returner $ bruker;

Dette mislykkes i testing med

ValidationException: "Brukernavn": ["Brukernavnet er allerede tatt."],
"E -post": ["e -posten er allerede tatt."]

Er det en måte å fikse dette elegant på?

Løsning

Dette er en vanlig feil i Laravel når du oppdaterer noe. Det vil som standard kreve ID som en nøkkel for å matche den eksisterende oppføringen. Så det du trenger å gjøre er å legge til ID for forekomsten som for øyeblikket blir oppdatert til validatoren.

Pass ID for forekomsten din for å ignorere den unike validatoren.
Bruk en parameter i validatoren for å oppdage om du oppdaterer eller oppretter ressursen.
Hvis du oppdaterer, tvinger du den unike regelen til å ignorere en gitt ID:

// Valideringsregler
'e -post' => 'unik: brukere, e -post_adresse,' . $ userId,
Hvis du oppretter, fortsett som vanlig:
// Valideringsregler
'e -post' => 'unik: brukere, e -post_adresse',