2015-01-26 7 views
5

Piszę aplikację Laravel 4, która ma tabelę users ze zwykłymi danymi kontaktowymi. W moim modelu users moja walidacja dla wiadomości e-mail określa 'email'=>'required|email|unique:users',, która działa poprawnie podczas rejestrowania nowych użytkowników.Laravel 4 - zastrzeżenie unikatowego ograniczenia adresu e-mail

Moje pytanie dotyczy sposobu obsługi formularza edycji użytkownika - po przesłaniu formularza chciałbym, aby wyjątkowe ograniczenie adresu e-mail było uruchamiane tylko wtedy, gdy nie jest to to samo, co poprzednia wiadomość e-mail - w przeciwnym razie można " t zapisz swój profil, ponieważ e-mail (Twój e-mail) jest już w użyciu.

Dzięki

Odpowiedz

6

trzeci parametr do ONZ Reguła ique pozwala określić id ignorowanego rekordu. Podczas edytowania użytkownika, chcesz, aby unikatowa reguła sprawdzania poprawności ignorowała wartość zawartą przez identyfikator edytowanego użytkownika.

'email'=>'required|email|unique:users,email,'.$userId 

Możesz zobaczyć dokumenty dotyczące zasady sprawdzania poprawności here.

Najtrudniejszą częścią, jaką napotkasz, jest ustalenie, jak edytować regułę, aby podać identyfikator edytowanego użytkownika. To wszystko zależy od tego, jak masz ustawione reguły i gdzie przeprowadzasz walidację.

+0

Zawsze możesz dołączyć do 'Auth :: user() -> id', ponieważ użytkownik zostanie zalogowany, aby edytować rekord. – Rafael

+2

Uzyskanie id nie musi być trudną częścią. Wprowadza identyfikator do reguły, z którą niektórzy mają problemy, w oparciu o to, jak i gdzie są zdefiniowane i wykorzystane ich reguły. Na przykład, jeśli twoje reguły są zdefiniowane jako statyczny atrybut w modelu, musisz mieć w regule jakiś typ zastępczy, a następnie metodę zastąpienia tego symbolu zastępczego określonym identyfikatorem, jak opisano w [tym] (http://stackoverflow.com/questions/28054979/laravel-4-form-validation-should-be-unique-on-update-form-but- if-if-current/28056267#28056267) pytanie/odpowiedź. – patricus

+1

Rozumiem twój punkt widzenia, ale w takim przypadku OP będzie musiał przekazać identyfikator funkcji, aby uzupełnić zasady sprawdzania poprawności. Mam nadzieję, że to zrobi. Ale wygląda na to, że to jest droga, zważywszy na to, jak to określił. – Rafael

1

Unikalne Składnia Validation

unique:table,column,except,idColumn

Spróbuj tego wykluczyć ostatni list

unique:'users', 'email', Auth::user()->email

+0

@ rafael - dziękuję, ale to naprawdę nie jest to, o czym mówię. Jeśli 'joe @ test.com' zarejestruje nowe konto, sprawdzanie poprawności działa poprawnie. Jeśli następnie prześle formularz edycyjny i * nie zmieni * swojego adresu e-mail, sprawdzanie poprawności nie powiedzie się, ponieważ wiadomość e-mail jest w użyciu, dlatego nie jest unikatowa. – user101289

+0

W migracji i/lub bazie danych należy ustawić adres e-mail jako ** indeksowany **. W ten sposób baza danych może obsłużyć takie rzeczy, a nie walidator. '$ table-> unique ('email');' [Laravel Schema builder] (http://laravel.com/docs/4.2/schema#adding-indexes) – Rafael