嗨,我有laravel项目,即时通讯使用自定义请求 这是我的请求代码
public function rules()
{
if($this->method() == 'POST' and $this->ajax())
{
return [
'id' => 'integer|min:1|unique:archive_categorys',
'archive_category_name' => 'max:50|min:1|unique:archive_categorys',
'archive_category_id' => 'nullable|integer|min:1|max:'.Archive_category::max('id'),
'archive_category_max' => 'nullable|integer|min:1|',
'archive_category_plus_value' => 'nullable|integer|min:1|',
'image' => 'nullable|image|mimes:jpg,jpeg,gif,png|max:2048',
];
}
elseif($this->method() == 'PATCH' )
{
return [
'id' => 'required|min:1|unique:archive_categorys,id,'.$this->id,
'archive_category_name' => 'required|max:50|min:1|unique:archive_categorys,archive_category_name,'.$this->id,
'archive_category_id' => 'nullable|min:1|max:'.Archive_category::max('id'),
'archive_category_max' => 'nullable|integer|min:1|',
'archive_category_plus_value' => 'nullable|integer|min:1|',
'image' => 'nullable|image|mimes:jpg,jpeg,gif,png|max:2048',
];
}
else
{
return false;
}
}
现在我的方法补丁问题
'id' => 'required|min:1|unique:archive_categorys,id,'.$this->id,
现在,如果我尝试将ID为1的archive_categorys更改为2
如果没有ID为2的archive_categorys,它将成功更新,但如果ID为2的另一个archive_categorys,则将通过并获得错误1062 Duplicate entry
所以更新时我如何检查laravel中的唯一值
答案 0 :(得分:1)
考虑到您有POST
路由创建了一个新条目,id
最好不从前端发送,而应作为MySQL的主键自动添加。
还要在您的PATCH
路由中,发送一个id
来验证其是否存在。
请检查更新的验证:
public function rules()
{
if($this->method() == 'POST' and $this->ajax())
{
return [
'archive_category_name' => 'max:50|min:1|unique:archive_categorys,name',
'archive_category_max' => 'nullable|integer|min:1',
'archive_category_plus_value' => 'nullable|integer|min:1',
'image' => 'nullable|image|mimes:jpg,jpeg,gif,png|max:2048',
];
}
elseif($this->method() == 'PATCH' )
{
return [
'id' => 'required|exists:archive_categorys,id,',
'archive_category_name' => 'required|max:50|min:1|unique:archive_categorys,archive_category_name,'.$this->input('id'),
'archive_category_max' => 'nullable|integer|min:1',
'archive_category_plus_value' => 'nullable|integer|min:1',
'image' => 'nullable|image|mimes:jpg,jpeg,gif,png|max:2048',
];
}
return [];
}