1

我有一个名为的表,Sides其中包含id、和其他一些目前不重要的字段。nameside_category_id

我想验证在创建新side记录时,该记录不存在。所以,假设我在数据库中有一条记录,例如:

id: 1
name: Salad
side_category_id: 3

如果我尝试插入新记录,name = 'salad'side_category_id = 3创建必须失败并返回错误。

我通过使用以下规则实现了这一点:

$rules = [
   'name'             => 'required',
   'side_category_id' => 'required|exists:side_categories,id|unique:sides,side_category_id,NULL,id,name,' . $this->request->get('name')
]

到现在为止还挺好。它按预期工作。但是现在如果我想编辑一条记录并保存它而不做任何修改,它会返回一个错误,这不是我想要的结果。

如果我尝试在不进行任何修改的情况下更新记录,它应该会成功。如何更新我的规则以实现这一目标?

4

1 回答 1

1

你可以使用Rule::unique()

像这样创建使用

$rules = [
   'name'             => ['required'],
   'side_category_id' => ['required',Rule::unique('sides', 'name')->where(function ($query) use($category_id) {
    return $query->where('side_category_id', $category_id);
}),Rule::exists('side_categories')]
]

更新_

$rules = [
       'name'             => ['required'],
       'side_category_id' => ['required',Rule::unique('sides', 'name')->where(function ($query) use($category_id) {
        return $query->where('side_category_id', $category_id);
    })->ignore($id),Rule::exists('side_categories')]
    ]
//$id should be you parameter
于 2020-02-18T05:19:53.847 回答