忽略Update Fucntion Laravel 5上的唯一验证

jac*_*013 1 php updating laravel laravel-5

我有这个customer模型,当你创建有一个unqiue phone_num.它在create中工作正常但在我的更新函数中,这是一个基于自动填充值的表单id.如果用户仅address按预期更新了unique验证,则会再次触发说明The phone num has already been taken.如何处理此问题?我希望用户能够更新它的信息,忽略unique验证,如果phone_num仍然相同,从而允许unique验证,如果用户选择更改phone_num

我的代码:

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');

    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*496 13

unique规则为此目的采用了一些额外的参数unique:table,column,except,idColumn

所以你的情况,except将是ididColumn将是你的ID的列的名称,大概id.

因此,考虑到这一点,您需要验证规则...

'required|unique:customers,phone_num,'.$id.',id'
Run Code Online (Sandbox Code Playgroud)


小智 5

在 L5.3+ 中,您可以使用规则外观流畅地处理它。请注意,验证规则现在将是数组,而不是使用 | 分隔符。使用 Illuminate\Validation\Rule;

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