强制唯一规则忽略给定ID

时间:2018-02-15 08:16:26

标签: php laravel laravel-5

在我的控制器中,我试图更新我的产品,这里的产品名称是唯一的,在这里我只想更新价格。所以名称将是它,但因为我定义名称作为一个唯一的字段,虽然我没有更改名称它会抛出我唯一的名称验证错误,因为这个名称已经存在。当我不更新唯一值时,如何忽略该验证请求?

public function update(Request $request, $id)
        {
           $this->validate($request, [              
            'name'=> 'required|unique:products,'.$id,
            ]);        
            $product= Product::find($id);
            $product->name = Input::get('name');
            $product->price = Input::get('price'); 
            $product->save();
       }

5 个答案:

答案 0 :(得分:4)

将其更改为:

'name'=> 'required|unique:products,name' . $id,

答案 1 :(得分:2)

unique column name添加到验证规则:

'name'=> 'required|unique:products,name,'.$id,

答案 2 :(得分:1)

Unique

unique:table,column,except,idColumn
  

验证字段在给定数据库表上必须是唯一的。   如果未指定列选项,则将使用字段名称。

试试这个:

        'name'=> 'required|unique:products,name'.$id,

答案 3 :(得分:0)

强制使用唯一规则忽略给定的ID:

use Illuminate\Validation\Rule;

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

答案 4 :(得分:0)

只需添加以下内容

'name' => [
    'required',
    Rule::unique('users')->ignore($user->id),
],

我尝试了很多但没有成功,然后我意识到 name 字段也包含在 $request->validate 数组内的不同数组中。

注意: ignore() 函数期望 id 和 unique() 函数期望表名