使用项目中的wheres验证数组项目

时间:2020-06-11 08:59:53

标签: laravel laravel-validation

上下文

我有两个订购模型: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',
    ]);

这适用于“静态验证”


目标

我要添加以下规则

'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可以这样工作,但是这样客户必须发送多个请求(一个用于创建订单,一个用于每个项目)< / p>

1 个答案:

答案 0 :(得分:4)

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