laravel 如何验证数组索引和值
laravel how to validate array index and values
我正在提交一维值数组以在 laravel 5.6
上处理
quantity[4]:11
quantity[2]:14
我必须同时验证索引和值,索引应该作为股票存在,id 和值必须是整数且最小值 1
我试过了
public function rules()
{
$rules = [
'quantity.*' => 'exists:stocks,id',
'quantity' => 'required|integer|min:1',
];
return $rules;
}
但它只验证值而不是索引,请分享您的想法和评论。
我看不到任何可以使用默认 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
(以降低成本)他们的 id 与 quantity
的 array_keys 时比较股票盘点结果。因为quantity
的索引存在于stocks
,所以$stockCntWithinArrIDs
必须等于count($ids)
,否则至少有一个索引不是stocks
id.
您可以使用foreach ($ids)
,然后查询相应的stock
,看看我的解决方案是否有效。但是请不要在生产环境中使用该解决方案。 :D
希望对您有所帮助!
已编辑:
参见:https://laravel.com/docs/5.6/validation#custom-validation-rules
我正在提交一维值数组以在 laravel 5.6
上处理quantity[4]:11
quantity[2]:14
我必须同时验证索引和值,索引应该作为股票存在,id 和值必须是整数且最小值 1
我试过了
public function rules()
{
$rules = [
'quantity.*' => 'exists:stocks,id',
'quantity' => 'required|integer|min:1',
];
return $rules;
}
但它只验证值而不是索引,请分享您的想法和评论。
我看不到任何可以使用默认 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
(以降低成本)他们的 id 与 quantity
的 array_keys 时比较股票盘点结果。因为quantity
的索引存在于stocks
,所以$stockCntWithinArrIDs
必须等于count($ids)
,否则至少有一个索引不是stocks
id.
您可以使用foreach ($ids)
,然后查询相应的stock
,看看我的解决方案是否有效。但是请不要在生产环境中使用该解决方案。 :D
希望对您有所帮助!
已编辑:
参见:https://laravel.com/docs/5.6/validation#custom-validation-rules