2017-02-22 2 views
1

사용자를 업데이트하려고하는데 전자 메일을 이미 받았을 때 전자 메일을 제외하고는 오류가 발생합니다. 지금 내 코드는 다음과 같습니다Laravel 5.4 유효성 확인 고유 문제

$user = User::find($id); 

$input['email'] = request('email'); 

$rules = array('email' => 'unique:users,email,'.$user->id); 

$validator = Validator::make($input, $rules); 

if ($validator->fails()) { 
    return back()->withInput()->withErrors(['email']); 
} 

이 완벽하게 잘 작동하지만 지금은 이메일이 이미 존재하는 경우에만 오류를 제공한다는 원하는 발견 레코드를 열 '기능'= '클라이언트',하지만 난에서 이 코드를 작성하는 방법을 모릅니다.

+0

이 tR4xX가 구글에서 검색 @ 누군가가 해결책을 가지고 있다면, 나는 어디서 어떻게 유엔에 넣을 지 모른다. ique 조항 – Mark

+0

당신은'function = 'client ''에 대해서만 의미 했습니까? –

+0

@VaibhavrajRoham 예, 지금은 전자 메일이 존재할 때 항상 오류가 발생하지만 'function'= 'client'열에 오류가 나타나기를 원하지 않습니다. – Mark

답변

0
$count = User::where('email','=',request('email')) 
     ->where('function','!=','client') 
     ->count(); 

if($count){ 
    return back()->withInput()->withErrors(['email' => 'Email Already Exist']); 
} 

코드 위에 무엇을 할 것인가 : 누구의 이메일

카운트 사용자는 request_email과 기능은 client 없습니다.

$count1보다 큰 경우 email을 의미합니다. 오류와

반환 Email Already Exist

1

enter image description here

그런 Laravel 5.4 문서에서 Exist ruleUnique rule 확인하는 것이 당신은 간단하게 할 수 있습니다 :

//Import Rule 
use Illuminate\Validation\Rule; 

...... 

$rules = array('email' => array('required', 
    Rule::unique('users')->where(function ($query) { 
     $query->where('function','!=', 'client'); 
    })->ignore($user->id) 
)); 

$validator = Validator::make($input, $rules); 

내가 위해야한다고 생각 비록 내가 100 % 확신 할 수 없다고해도 충분하다. 우리의 기대는 무엇인지 놓치고 있다고 생각합니다.

0

이 시점에서 강력한 Laravel의 검증을 사용해야합니다. 설명서에 따르면 :

유효성 검사 대상 필드는 주어진 데이터베이스 테이블에서 고유해야합니다. column 옵션을 지정하지 않으면 필드 이름이 사용됩니다.

그리고 단순히 통치 :

독특한 : 테이블, 열, idColumn 제외

코드 :

$request->validate([ 
    'email' => 'unique:users,email_address,'.$request->get('id').',id' 
]); 

자세히보기 : https://laravel.com/docs/5.3/validation#rule-unique