2017-02-22 176 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

你是否僅僅爲'where 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

如果$count大於1這意味着重複email

錯誤返回該Email Already Exist

1

檢查從Laravel 5.4文檔的Exist ruleUnique rule

enter image description here

然後,你可以簡單地有:

//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%保證它適合y,也是足夠的我們的期望,但我認爲它應該顯示你缺少的東西。

0

在這一點上,你應該使用強大的Laravel的驗證。 根據文檔:

驗證字段在給定的數據庫表中必須是唯一的。如果未指定列選項,則將使用字段名稱。

,簡單規則:

獨特:表,列,除非,idColumn

代碼:

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

瞭解更多: https://laravel.com/docs/5.3/validation#rule-unique