我正在提交一个单维数组值来处理laravel 5.6
quantity[4]:11
quantity[2]:14
我必须验证索引和值,索引应该以库存的形式退出,id和value必须是整数且最小值为1
我试过
public function rules()
{
$rules = [
'quantity.*' => 'exists:stocks,id',
'quantity' => 'required|integer|min:1',
];
return $rules;
}
但是它只验证了不是索引的值,请分享您的想法和评论。
答案 0 :(得分:3)
我无法在任何地方看到我们可以使用默认的Laravel验证来验证数组索引。这就是为什么我们需要编写一个自定义的。
public function rules()
{
$rules = [
'quantity.*' => 'required|integer|min:1',
'quantity' => [
'required',
'min:1', // make sure the input array is not empty <= edited
'array',
function($attribute, $value, $fail) {
// index arr
$ids = array_keys($value);
// query to check if array keys is not valid
$stockCntWithinArrIDs = StockModelFullNameWhaterver::whereIn('id', $ids)->count();
if ($stockCntWithinArrIDs != count($ids))
return $fail($attribute.' is invalid.'); // -> "quantity is invalid"
}
],
];
return $rules;
}
主要观点是在查询whereIn
(以降低成本)时使用quantity
的array_keys来比较库存计数结果。由于quantity
中的stocks
索引存在,$stockCntWithinArrIDs
必须等于count($ids)
,否则,至少有一个索引不是stocks
标识。
您可以使用foreach ($ids)
然后查询相应的stock
以查看我的解决方案是否有效。但请不要在生产环境中使用该解决方案。 :d
希望这有帮助!
已编辑:
请参阅:https://laravel.com/docs/5.6/validation#custom-validation-rules
答案 1 :(得分:0)