php - 忽略更新功能 Laravel 5 的唯一验证

我有这个 customer 模型,当您创建它时,它有一个独特的 phone_num 。它在创建中运行良好,但在我的更新函数中运行良好,更新函数是一种基于 id 自动填充值的表单。如果用户仅按预期更新了 addressunique 验证将再次触发,提示 The phone num has already been taken. 我该如何处理这个问题?如果 phone_num 仍然相同,我希望用户能够更新它的信息而忽略 unique 验证,从而允许 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');

    }
}

最佳答案

unique 规则为此需要一些额外的参数,看起来像 unique:table,column,except,idColumn

因此在您的情况下,except 将是 ididColumn 将是您的 id 列的名称,可能是 id.

考虑到这一点,您希望您的验证规则是...

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

https://stackoverflow.com/questions/31340314/

相关文章:

r - 将整数 "20160119"转换为 "day"的不同列 "year" "month"

javascript - 如何检查 Node js中的变量是否为空或未定义

reactjs - 为什么 "import { React } from ' react ';“不起

python - opencv 自动完成不适用于 pycharm

sql - 添加具有默认值的列?

haskell - 如何在 Haskell 中将 IO [[Int]] 转换为 [[Int]]?

python - 如何在 Windows 命令提示符下运行 python 文件?

typescript - TypeError : (0 , next_sanity__WEBPACK

swift - 在 swift 4 的 for 循环中大于和小于等于

angular - PrimeNg 图标不显示(复选框和选择)