Laravel 尝试更新相同的记录而不进行任何更改时验证规则失败

Laravel validation rule fails when trying to update the same record with no changes

我有一个名为 Sides 的 table,它由 idnameside_category_id 和其他一些目前不重要的字段组成.

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

id: 1
name: Salad
side_category_id: 3

如果我尝试使用 name = 'salad'side_category_id = 3 插入新记录,则创建一定会失败并且 return 出错。

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

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

到目前为止一切顺利。它按预期工作。但是现在 return 如果我想编辑一条记录并在不做任何修改的情况下保存它,它会出错,这不是我想要的结果。

如果我尝试不加修改地更新记录,应该会成功。我怎样才能更新我的规则来实现这个目标?

您可以使用 Rule::unique()

for create 像这样使用

$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