Laravel 尝试更新相同的记录而不进行任何更改时验证规则失败
Laravel validation rule fails when trying to update the same record with no changes
我有一个名为 Sides
的 table,它由 id
、name
、side_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
我有一个名为 Sides
的 table,它由 id
、name
、side_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