2016-05-07 2 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 выполняет поиск, если письмо существует в db. Идентификатор пользователя здесь работает как исключение проверки для этого пользователя.

Кроме того, если вы хотите, чтобы это письмо не редактировалось, просто исключите его из запроса.

$ input = $ request-> excpet (['email']); проверить уникальный валидатор docs

+0

После уникальной: пользователи, мы должны добавить необходимого столбца «электронная почта», то идентификатор требуемого пользователя. Пример: 'email' => 'unique: users, email,'. $ User-> id он работает, спасибо :) – Rashid

Смежные вопросы