Laravel表单验证中子级数据的唯一性过滤如何写?
【场景】
在更新产品时会传递产品表products的信息和子产品表product_items的信息,大概是这样:
{
"name": "",
"items": [
{
"id": 13,
"name": "",
"spec_name": "B01 浅肤色",
"price": 19.99,
"purchase_limit_qty": 3,
"inventory_qty": 9999
},
{
"id": 14,
"name": "",
"spec_name": "B02 象牙白",
"price": 19.99,
"purchase_limit_qty": 3,
"inventory_qty": 9999
},
],
"status": true,
"is_pick_up": true,
"is_ship": true,
"start_ship_time": "",
"stop_ship_time": "",
"user_id": 5,
"assistant_name": ""
}
如何在更新时忽略当前的子产品ID呢?Route::unique()->ignore($item_id)不知道如何获取这个ID。当前过滤代码如下:
$id = $this->route('product', 0);
switch ($this->method()) {
case 'POST':
case 'PUT':
$rules = [
"name" => "required|unique:products,name,{$id}",
"items" => 'array',
"items.*.spec_name" => [
'required',
'distinct',
Rule::unique('product_items', 'spec_name')->where(function (Builder $query) use ($id) {
return $query->where('product_id', $id);
})],
"items.*.price" => 'required|numeric',
"items.*.purchase_limit_qty" => 'required|numeric',
"items.*.inventory_qty" => 'required|numeric',
"status" => "required",
"is_pick_up" => "boolean",
"is_ship" => "boolean",
"start_ship_time" => "required|date",
"stop_ship_time" => "required|date",
"user_id" => "required",
];
}
return $rules;
推荐文章: