Model aktualizacji laravel z unikalną regułą sprawdzania poprawności dla atrybutu

Model aktualizacji laravel z unikalną regułą sprawdzania poprawności dla atrybutu

Problem

Mam model użytkownika Laravel, który dodałem unikalną regułę sprawdzania poprawności nazwy użytkownika i e -maila. Teraz, kiedy aktualizuję mojego użytkownika za pośrednictwem mojego repozytorium i chcę ponownie weryfikować mój model, otrzymuję błąd. Tak wygląda moja metoda aktualizacji

aktualizacja funkcji publicznej ($ id, $ data)
$ user = $ this-> FindById ($ id);
$ user-> wypełnij ($ data);
$ this-> validate ($ user-> toArray ());
$ user-> save ();
Zwrot $ użytkownika;

To nie jest w testowaniu z

ValidationException: „nazwa użytkownika”: [„nazwa użytkownika została już pobrana."],
„E -mail”: [”e -mail został już pobrany."]

Czy istnieje sposób na eleganckie to naprawienie?

Rozwiązanie

Jest to powszechny błąd w Laravel, gdy cokolwiek aktualizujesz. Domyślnie będzie wymagać identyfikatora jako klucza w celu dopasowania istniejącego wpisu. Więc musisz dołączyć identyfikator instancji, która jest aktualnie aktualizowana do walidacza.

Przekaż identyfikator instancji, aby zignorować unikalny walidator.
W sprawdzeniu walidera użyj parametru do wykrycia, jeśli aktualizujesz lub tworzysz zasób.
Po aktualizacji wymuszaj unikalną regułę, aby zignorować dany identyfikator:

// Reguły walidacji
„e -mail” => ”Użytkownicy: e -mail_address”, ' . $ userID,
Jeśli tworzy, postępuj jak zwykle:
// Reguły walidacji
„e -mail” => 'unikalny: użytkownicy, e -mail_address',