2016-05-07 55 views
0

我正在使用Laravel 5.2,我試圖創建一個儀表板,用戶可以更新他的信息,但我面臨一個繞過唯一的問題:驗證器中的用戶。繞過電子郵件=唯一:laravel用戶

如果用戶想要保留相同的電子郵件,驗證器給出'電子郵件已被採納'的錯誤,用戶也不應該將電子郵件更改爲另一個用戶保留的電子郵件。

如果此用戶是唯一擁有此電子郵件的用戶,我該如何避免此驗證。

我控制器功能:

public function update(Request $request) 
{ 

    $validator = Validator::make($request->all(), [ 
     'name'    => 'required|max:255', 
     'email'    => 'required|email|max:255|unique:users', 
     'password'   => 'required|min:6|confirmed',     
    ]); 

    // if fails, return response with errors 
    if($validator->fails()) 
     return back()->withErrors($validator)->withInput(); 

    $user = Auth::user(); 
    $user->name    = $request->input('name'); 
    $user->email   = $request->input('email'); 
    $user->password   = bcrypt($request->input('password')); 
    $user->update(); 


    return back()->withInput(); 
} 

回答

1

Laravel的獨特驗證可以採取額外的參數,可以幫助你排除了獨特的支票給ID

的語法是:

unique:<table>,<column>,<id_to_exclude> 

在你的情況,你需要的follwing驗證規則:

'email' => 'required|email|max:255|unique:users,email,'.$id 
+0

正是我想要的!謝謝 :) – Rashid

0

只要改變你的代碼:

public function update(Request $request) 
    { 
    $id = Auth::user()->id; 
    $validator = Validator::make($request->all(), [ 
     'name'    => 'required|max:255', 
     'email'    => 'required|email|max:255|unique:users'.$id, 
     'password'   => 'required|min:6|confirmed',     
    ]); 

    // if fails, return response with errors 
    if($validator->fails()) 
     return back()->withErrors($validator)->withInput(); 

    $user = Auth::user(); 
    $user->name    = $request->input('name'); 
    $user->email   = $request->input('email'); 
    $user->password   = bcrypt($request->input('password')); 
    $user->update(); 


    return back()->withInput(); 
} 

爲什麼這個工程?那麼laravel Unique validation在指定的表中搜索唯一值。因此unique:users會搜索電子郵件是否存在於數據庫中。此處的用戶ID用作排除此用戶的檢查的一種方式。

另外,如果您不想編輯該電子郵件,那麼請將其從請求中排除。

$ input = $ request-> excpet(['email']);檢查docs

+0

後獨特的:我們必須添加所需的用戶的電子郵件「一欄中則ID所需的用戶。例如: 'email'=>'unique:users,email,'。$ user-> id 它的工作原理,謝謝:) – Rashid