使用 wheres from items 验证数组项
Validate array items with wheres from items
上下文
我有两个订单模型,它们是:Order
和 OrderItem
。
在 OrderController 中,我想验证项目数组。我检查了 Laravel array validation 并发现我可以使用这样的东西:
$customer_id = Auth::guard('api')->user()->id;
$validate = validator($request->all(), [
'address_id' => 'required|numeric|exists:addresses,id,customer_id,' . $customer_id,
'items.*.product_id'=> 'required|numeric|exists:products,id',
]);
这适用于 "static validation"
目标
我要添加以下规则
'items.*.product_color_id' => 'required|numeric|unique:order_items,product_color_id,NULL,id,product_size_id,' . $request->product_size_id . ',product_id,' . $request->product_id . '|exists:product_colors,id,product,' . $request->product_id,
问题是如何对项目中的每次迭代进行 $request->product_size_id
更改?
备注
我考虑过让它们成为两个控制器 OrderController
和 OrderItemController
它会以这种方式工作,但这样客户端必须发送多个请求(一个用于创建订单,一个用于每个项目)
我找到了 here。我不得不为此编写一个 for 循环,如下所示:
$validation = [];
for ($i = 1; $i <= count($request->get('recipients')); $i++) {
$validation[] = [
'to.'.$i.'.email' => 'required|email',
'to.'.$i.'.name' => 'required|string',
];
}
$this->validate($request, ['to' => 'required|array'] + $validation);
这样我可以得到$request[$i]->get('product_size_id')
上下文
我有两个订单模型,它们是:Order
和 OrderItem
。
在 OrderController 中,我想验证项目数组。我检查了 Laravel array validation 并发现我可以使用这样的东西:
$customer_id = Auth::guard('api')->user()->id;
$validate = validator($request->all(), [
'address_id' => 'required|numeric|exists:addresses,id,customer_id,' . $customer_id,
'items.*.product_id'=> 'required|numeric|exists:products,id',
]);
这适用于 "static validation"
目标
我要添加以下规则
'items.*.product_color_id' => 'required|numeric|unique:order_items,product_color_id,NULL,id,product_size_id,' . $request->product_size_id . ',product_id,' . $request->product_id . '|exists:product_colors,id,product,' . $request->product_id,
问题是如何对项目中的每次迭代进行 $request->product_size_id
更改?
备注
我考虑过让它们成为两个控制器 OrderController
和 OrderItemController
它会以这种方式工作,但这样客户端必须发送多个请求(一个用于创建订单,一个用于每个项目)
我找到了 here。我不得不为此编写一个 for 循环,如下所示:
$validation = [];
for ($i = 1; $i <= count($request->get('recipients')); $i++) {
$validation[] = [
'to.'.$i.'.email' => 'required|email',
'to.'.$i.'.name' => 'required|string',
];
}
$this->validate($request, ['to' => 'required|array'] + $validation);
这样我可以得到$request[$i]->get('product_size_id')