我正在使用 laravel 开发库存系统。
一切都按预期进行,直到我遇到表单验证问题。
所以下面是我的订单控制器代码中的插入功能,
public function insert(Request $request) {
// Save data to "orders" table
$orderer = [
'orderId' => $request->get('orderId'),
'customerId' => $request->get('customerId'),
'orderTotal' => $request->get('orderTotal'),
'paymentMethodId' => $request->get('paymentMethodId'),
'orderStatusId' => $request->get('orderStatusId'),
'created_at' => \Carbon\Carbon::now(), # \Datetime()
'updated_at' => \Carbon\Carbon::now() # \Datetime()
];
// Looping on dynamic "New Added" input field
$orderedItems_Sku = $request->get('productSku');
foreach($orderedItems_Sku as $key => $v)
{
$productSku = $request->get('productSku') [$key];
$product = \App\Product::find($productSku);
$rules = [
'orderId' => 'unique:orders',
'customerId' => 'required',
'orderStatusId' => 'required',
'paymentMethodId' => 'required',
'uomId.*' => 'required',
'productSku.*' => 'required',
'productQty.*' => 'required',
// 'lte' means Less Than or Equal to available stock quantity
'orderQty.*' =>
'required|numeric|min:1|lte:'.$product['productQty'],
'orderPrice.*' => 'required'
];
$messages = [
'customerId.required' => 'Please select Customer',
'orderStatusId.required' => 'Please select Order Status',
'paymentMethodId.required' => 'Please select Payment Method',
'uomId.*.required' => 'Please select UOM',
'productSku.*.required' => 'Please select Product',
'orderQty.*.required' => 'Please enter Order Quantity',
'orderQty.*.min' => 'Quantity must be at least 1',
'orderQty.*.lte' => 'Quantity of product no.
'.$product['productSku'].' must be not greater than
'.$product['productQty'],
'orderPrice.*.required' => 'Please enter Product Price'
];
// Validate "Rules" and "Messages" to running.
$this->validate($request, $rules, $messages);
$data = [
'orderId' => $request->get('orderId'),
'productSku' => $v,
'orderQty' => $request->get('orderQty') [$key],
'uomId' => $request->get('uomId'),
'orderPrice' => $request->get('orderPrice') [$key],
'orderDiscount' => $request->get('orderDis') [$key],
'orderPerAmount' => $request->get('orderPerAmount') [$key],
'created_at' => \Carbon\Carbon::now(), # \Datetime()
'updated_at' => \Carbon\Carbon::now() # \Datetime()
];
\App\orderedItem::insert($data);
// "Decrement" means, product quantity will be deducted based on how
much quantity that customer has ordered.
\App\Product::where("productSku", $v)->decrement("productQty",
$request->orderQty [$key]);
}
\App\Order::insert($orderer);
return redirect('orders')->with('success', 'Order Successfully Added!');
}
这是我在 create.blade.php 中的 html 代码,
如您所见,有“orderQty”和“productQty”字段。
因此,我尝试使用动态“productQty”字段验证动态“orderQty”字段,以防止用户在“productQty”字段中输入大于值的数量。
根据大多数 laravel 社区的推荐,我还在我的代码中的 $rules 数组中使用 lte(小于等于)命令。
这个东西只适用于单个输入,但不适用于动态添加的输入。请参阅下图,您可以看到,产品的第二个输入没有按照我的要求正确验证。
甚至错误消息也没有按需要显示动态消息。
请帮我找出问题所在。我尝试了很多解决方案,但仍然无法正常工作。:'(