2015-01-26 2 views
5

나는 보통 연락처 정보가있는 users 테이블이있는 Laravel 4 앱을 작성하고 있습니다. 내 users 모델에서 이메일에 대한 유효성 검사는 새로운 사용자를 등록 할 때 잘 작동하는 'email'=>'required|email|unique:users',을 지정합니다.Laravel 4 유효성 검사 전자 메일 고유 제한

제 질문은 사용자 편집 양식을 처리하는 방법입니다. 양식을 제출할 때 이전 이메일과 동일하지 않은 경우에만 고유 한 이메일 제약 조건을 해고하고 싶습니다. 그렇지 않으면 ' 이메일 (이메일)이 이미 사용 중이므로 프로필을 저장하지 마십시오.

감사

답변

6

에게 세 번째 매개 변수를 제외 할이 시도 ique 규칙은 무시할 레코드의 id를 지정할 수있게합니다. 사용자를 편집 할 때 고유 한 유효성 검사 규칙을 사용하여 편집중인 사용자의 ID에 포함 된 값을 무시해야합니다.

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

유효성 검사 규칙 here에서 문서를 볼 수 있습니다.

가장 힘든 부분은 편집중인 사용자의 ID를 제공하기 위해 규칙을 편집하는 방법입니다. 규칙은 설정 방법과 유효성 검사를 수행하는 위치에 따라 다릅니다.

+0

언제나'Auth :: user() '를 연결할 수 있습니다. -> id' 사용자가 레코드를 편집하기 위해 로그인 할 것이므로 – Rafael

+2

ID를 얻는 것이 반드시 까다로운 부분 일 필요는 없습니다. 규칙을 정의하고 사용하는 방법이나 위치에 따라 일부 사람들이 문제를 가진 규칙에 ID를 주입합니다. 예를 들어, 규칙이 모델의 정적 속성으로 정의 된 경우 규칙에 특정 유형의 자리 표시자를 가져와야하며 [[this]]에서 설명한대로 해당 자리 표시자를 특정 ID로 대체하는 메소드가 있어야합니다 http://stackoverflow.com/questions/28054979/laravel-4-form-validation-should-be-unique-on-update-form-but-not-if-current/28056267#28056267) question/answer. – patricus

+1

나는 귀하의 요지를 보았습니다. 그러나이 경우 유효성 검사 규칙을 완성하기 위해 함수에 ID를 전달하는 것은 OP에 달려 있습니다. 잘하면 그는 그렇게 할 것입니다. 그러나 이것이 그가 이것을 설정하는 방식을 고려할 때 이것이 갈 길 인 것처럼 보인다. – Rafael

1

고유 검증 구문

unique:table,column,except,idColumn

유엔 현재 이메일

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

+0

@ rafael-- 감사합니다.하지만 그건 제가 의미하는 바가 아닙니다. 'joe @ test.com'이 새 계정을 등록하면 유효성 검사가 정상적으로 작동합니다. 그런 다음 편집 양식을 제출하고 * 전자 메일을 변경하지 않으면 전자 메일이 사용 중이므로 검증이 실패하므로 고유하지 않습니다. – user101289

+0

마이그레이션 및 또는 데이터베이스에서 전자 메일 필드를 ** 고유 인덱스 **로 설정해야합니다. 그렇게하면 데이터베이스가 유효성 검사자가 아닌 이런 종류의 작업을 처리 할 수 ​​있습니다. 'Laravel Schema builder'(http://laravel.com/docs/4.2/schema#adding-indexes) – Rafael

관련 문제