Я нигде не вижу, мы можем проверить индекс массива с помощью проверки по умолчанию 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
(для уменьшения стоимости) их идентификатора с array_keys quantity
.Поскольку индекс quantity
существует в stocks
, $stockCntWithinArrIDs
должен равняться count($ids)
, если нет, то по крайней мере один индекс отличается от stocks
id.
Вы можетеиспользуйте foreach ($ids)
, затем запросите соответствующий stock
, чтобы увидеть, работает ли мое решение.Но ПОЖАЛУЙСТА НЕ используйте это решение в производственной среде.: D
Надеюсь, эта помощь!
Отредактировано:
См .: https://laravel.com/docs/5.6/validation#custom-validation-rules