$routeName, 'page' => $pageNumber, 'pageSize' => $perPage ], $args); do { /** @var array $result */ $result = \forward_static_call_array([$apiClassName, 'paginate'], $args); $args['page'] = ++$pageNumber; foreach ($result as $row) { if (!is_array($row)) { throw new \ErrorException(\sprintf( 'Unexpected type for $row got %s', \gettype($row) )); } try { $saveCallback($row); } catch (ValidationException $e) { $this->invalidRows[] = collect($row)->put('validation_message', collect($e->errors()) ->mapWithKeys(function (array $messages, string $attribute) { return [$attribute => collect($messages)->implode(', ')]; })->implode(' '))->all(); } } } while (!empty($result)); } /** * Send an email with invalid rows * * @param array $uniqueKeys * @param string $jobClass * @return void */ protected function mailInvalidRows(array $uniqueKeys, string $jobClass) { /** @var array Unique Key columns */ $invalidRowKeys = []; $uniqueKeys = \array_merge(['validation_message'], $uniqueKeys); \collect($this->invalidRows) ->map(function ($invalidRow) use ($uniqueKeys, &$invalidRowKeys) { $o = []; foreach ($uniqueKeys as $uField) { $o[$uField] = $invalidRow[$uField]; } $invalidRowKeys[] = $o; }); if (!count($invalidRowKeys)) { return; } Mail::send('mails.invalidApiRows', [ 'invalidkeys' => $invalidRowKeys, 'jobClass' => $jobClass ], function ($m) { $m->to( config('mail.contactsList.invalidCafel'), sprintf('%s Exception Handler', config('app.name')) )->subject('There are invalid data sheets provided by Cafel api.'); }); } }