Как проверить индекс массива и значения - PullRequest
0 голосов
/ 05 июня 2018

Я отправляю одномерный массив значений для обработки на уровне 5.6

quantity[4]:11
quantity[2]:14

Мне нужно проверить как индекс, так и значение, индекс должен выйти, поскольку акции, идентификатор и значение должны быть целыми иминимум 1

Я пытался

public function rules()
{
    $rules = [
       'quantity.*' => 'exists:stocks,id',
       'quantity' => 'required|integer|min:1',
    ];

    return $rules;
}

, но он проверяет только значения, а не индексы, пожалуйста, поделитесь своими мыслями и комментариями.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я нигде не вижу, мы можем проверить индекс массива с помощью проверки по умолчанию 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

0 голосов
/ 05 июня 2018

Проверьте это для уникальных значений массива https://laravel.com/docs/5.6/validation#rule-distinct

...