['required', 'array', 'min:1'], 'ids.*' => ['integer'], ]); } /** * Bulk endpoint always returns the per-row envelope — for a request-level * validation failure (bad field values, missing ids) we fan the same * error messages out to every id the caller aimed at so downstream code * iterating `results` doesn't need a special "whole payload rejected" * branch. */ protected function failedValidation(Validator $validator) { $errorMessages = $validator->errors()->messages(); $ids = array_values(array_unique(array_map( 'intval', array_filter((array) $this->input('ids', []), fn ($v) => is_numeric($v)) ))); $results = array_map(fn ($id) => [ 'id' => $id, 'status' => 'error', 'messages' => $errorMessages, 'payload' => null, ], $ids); throw new HttpResponseException(response()->json([ 'status' => 'error', 'messages' => $ids === [] ? $errorMessages : trans('admin/hardware/message.bulk_update.error'), 'results' => $results, ])); } /** * Bulk can't `Rule::unique->ignore()` N ids simultaneously; per-row * uniqueness collisions are caught by Watson's ValidatingTrait at * save-time and surface as row-level errors in the envelope. */ protected function ignoreIdForUnique(): ?int { return null; } }