Laravel:更新时创建唯一的验证并创建

时间:2018-02-07 14:40:32

标签: php mysql laravel validation unique

我有一个规则请求,我确认一个字段是唯一的。

当我使用时:

'cod_upb' => 'required|max:10|unique:equipos,cod_upb,'.$this->id,

它适用于create方法,因为它不允许我重复数据库中的字段。但是当我尝试更新它时,该字段已经存在或被采用。

然后我尝试了:

'cod_upb' => 'required|max:10|unique:equipos,id,'.$this->id,

哪个适用于更新,但它允许我创建重复该字段的新项目。

我该如何解决?

3 个答案:

答案 0 :(得分:1)

Unique规则

  

独特:表,列,除了,idColumn

第3个参数用于value for column to except,第4个用于column to except

我也像这样对insertupdate使用一种验证方法

public function validateItems($requestAll){
    $id = isset($requestAll['id']) ? ','.$requestAll['id'].',id':'';
    $rules = [
        'cod_upb' => 'required|max:10|unique:equipos,cod_upb,'.$id,
    ];
    return Validator::make($requestAll, $rules);
}

只需更改$requestAll['id']代码id,在您的情况下可能是$this->id

答案 1 :(得分:0)

您正在检查更新时的唯一错误。您正在针对id字段而不是cod_upb字段进行检查。 $this->id应该重命名为$equiposId。确保$this->id是表示数据库中equipos记录的ID。

改变这个:

'cod_upb' => 'required|max:10|unique:equipos,id,'.$this->id,

对此:

'cod_upb' => 'required|max:10|unique:equipos,cod_upb,'.$this->id,

在laravel 5.5

'cod_upb' => Rule::unique('equipos')->ignore($this->id),

在Laravel文档中详细了解此内容:https://laravel.com/docs/5.5/validation#rule-unique

答案 2 :(得分:0)

这是解决方案:

要创建:

public function controllerName(Request $request, $id)

{

$this->validate($request, [
        "form_field_name" => 'required|unique:db_table_name,db_table_column_name'
    ]);

    // the rest code

}

用于更新:

public function anotherControllerName(Request $request, $id)

{

$this->validate($request, [
        "form_field_name" => 'required|unique:db_table_name,db_table_column_name,'.$id
    ]);

    // the rest code

}

就是这样。快乐编码:)