2015-07-10 56 views
1

忽略独特验证我有当您创建具有unqiue phone_num这个customer模型。它在创建时可以正常工作,但是在我的更新函数中,这是一种基于id的自动填充值形式。如果用户只按预期更新了address,则unique验证将再次触发The phone num has already been taken.如何处理此问题?我希望用户能够更新它忽略了unique验证,如果phone_num仍从而使得如果用户选择改变phone_num上更新温控功能Laravel 5

我的代码unique验证相同的信息:

public function update($id) 
{ 
    $rules = array(
     'title'    => 'required', 
     'firstname'   => 'required', 
     'lastname'   => 'required', 
     'gender'   => 'required', 
     'birthdate'   => 'required', 
     'age_bracket'  => 'required', 
     'addr1'    => 'required', 
     'addr2'    => 'required', 
     'addr3'    => 'required', 
     'addr4'    => 'required', 
     'town'    => 'required', 
     'country'   => 'required', 
     'postcode'   => 'required', 
     'phone_num'   => 'required|unique:customers', 
     'phone_type'  => 'required', 
     'work_status'  => 'required', 
     'home_status'  => 'required', 
     'marital_status' => 'required', 

    ); 

    $validator = Validator::make(Input::all(), $rules); 


    // Check if all fields is filled 
    if ($validator->fails()) 
    { 
     return Redirect::to('customer/'.$id.'/edit')->withErrors($validator); 
    } 
    else 
    { 
     $customer = Customer::find($id); 
     $customer->title   = Input::get('title'); 
     $customer->gender   = Input::get('gender'); 
     $customer->firstname  = Input::get('firstname'); 
     $customer->lastname  = Input::get('lastname'); 
     $customer->postcode  = Input::get('postcode'); 
     $customer->addr1   = Input::get('addr1'); 
     $customer->addr2   = Input::get('addr2'); 
     $customer->addr3   = Input::get('addr3'); 
     $customer->addr4   = Input::get('addr4'); 
     $customer->addr4   = Input::get('addr4'); 
     $customer->town   = Input::get('town'); 
     $customer->country   = Input::get('country'); 
     $customer->phone_num  = Input::get('phone_num'); 
     $customer->phone_type  = Input::get('phone_type'); 
     $customer->birthdate  = Input::get('birthdate'); 
     $customer->work_status  = Input::get('work_status'); 
     $customer->home_status  = Input::get('home_status'); 
     $customer->marital_status = Input::get('marital_status'); 
     $customer->agebracket  = Input::get('age_bracket'); 

     if($customer->save()) 
     { 
      Session::flash('alert-success', 'Form Submitted Successfully.'); 
     } 
     else 
     { 
      Session::flash('alert-danger', 'Error on submitting form.'); 
     } 

     return Redirect::to('customer/'.$id.'/edit'); 

    } 
} 

回答

8

unique规则需要一些额外的参数只是这个目的,它看起来像unique:table,column,except,idColumn

所以你的情况,except将是ididColumn将是您的ID列的名称,可能是id

所以考虑到这一点,你会希望你的验证规则是...

'required|unique:customers,phone_num,'.$id.',id' 
+0

哇!完美的作品!非常感谢! – jackhammer013

2

在L5.3 +你能流利使用规则门面处理。请注意, 验证规则现在将成为数组而不是使用|分隔符。 使用Illuminate \ Validation \ Rule;

Validator::make($data, [ 
    'email' => [ 
    'required', 
    Rule::unique('users')->ignore($user->id), 
    ], 
]);