使用 wheres from items 验证数组项

Validate array items with wheres from items

上下文

我有两个订单模型,它们是:OrderOrderItem

在 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 更改?


备注

我考虑过让它们成为两个控制器 OrderControllerOrderItemController 它会以这种方式工作,但这样客户端必须发送多个请求(一个用于创建订单,一个用于每个项目)

我找到了 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')