我有一个规则请求,我确认一个字段是唯一的。
当我使用时:
'cod_upb' => 'required|max:10|unique:equipos,cod_upb,'.$this->id,
它适用于create方法,因为它不允许我重复数据库中的字段。但是当我尝试更新它时,该字段已经存在或被采用。
然后我尝试了:
'cod_upb' => 'required|max:10|unique:equipos,id,'.$this->id,
哪个适用于更新,但它允许我创建重复该字段的新项目。
我该如何解决?
答案 0 :(得分:1)
在Unique规则
中独特:表,列,除了,idColumn
第3个参数用于value for column to except
,第4个用于column to except
我也像这样对insert
和update
使用一种验证方法
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
}
就是这样。快乐编码:)