laravel自定义请求验证ID

时间:2019-02-17 11:50:46

标签: php laravel

嗨,我有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中的唯一值

1 个答案:

答案 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 [];
}