Api Response и формат Json laravel - PullRequest
0 голосов
/ 12 мая 2019

Я использую Laravel 5.7.и GuzzleHttp 6.0 для получения ответа API от конечной точки

Я передаю данные запроса из формы Blade в эту функцию.

public static function prhmulti($multisearch, $start ,$end)

{   $city = $multisearch['city'];

  $client = new Client([
     'base_uri' =>  'https://avoindata.prh.fi/tr/',
     'query' => [
    'totalResults' => 'true',
    'maxResults' => '1000',
    'registeredOffice'=> $city,
    'companyForm'=>'OY',
    'companyRegistrationFrom'=>$start,
    'companyRegistrationTo'=>$end,
],
       'defaults'=>[
       'timeout'  => 2.0,
       'cookies' => true,
       'headers'  => [
         'content-type' => 'application/json',
         'User-Agent' =>"GuzzleHttp/Laravel-App-5.7, Copyright MikroMike"
       ]]]);

$res = $client->request('GET','v1');
$ResData = json_decode($res->getBody()->getContents());

dd ($ ResData) возвращает все данные из ответа API.

Но я не могу вернуть JSON обратно в другую функцию

return $this->multisave($ResData);



public static function multisave (data $ResData)

Это будетпарсинг JSON и

{
 foreach ($data->results as $company) {
    $name = $company->name;
    $Addr = $company->addresses;
    $businessId = $company->businessId;
    $companyForm = $company->companyForm;
    $registrationDate = $company->registrationDate;

  foreach ($company->addresses as $Addr) {
      $city = $Addr->city;
      $postcode = $Addr->postCode;
      $street = $Addr->street;
   }
 }

сохранение данных в Mysql.

$NewCompany = new Company();

 $NewCompany = Company::updateOrCreate($array,[
 [ 'vat_id', $businessId],
 [ 'name', $name],
 [ 'form',$companyForm],
 [ 'street', $Addr],
 [ 'postcode', $postcode],
 [ 'city', $city],
 [ 'regdate', $registrationDate],
 ]);

}

ЕСЛИ парсинг части и сохранение части внутри одного и того же кода функции работает нормально (сохранить только одну компанию),

но мне нужно разделить их, потому что позже их легче поддерживать.

Ошибка, которую я получаю, чтобы вернуть $ ResData

" Using $this when not in object context" 

Информация находится в массиве JSON.

Кроме того, какую часть можно сохранить ТОЛЬКО для одной компании?

  foreach ($data->results as $company) {
  $name = $company->name;
  $Addr = $company->addresses;
  $businessId = $company->businessId;
  $companyForm = $company->companyForm;
  $registrationDate = $company->registrationDate;

foreach ($company->addresses as $Addr) {
   $city = $Addr->city;
   $postcode = $Addr->postCode;
   $street = $Addr->street;
 }

Итак: 1) Каков наилучший способ создания собственной функции для анализа JSON и другой функции для сохранения данных в БД?2) Как в цикле foreach сохраняются только данные одной компании. Как лучше всего это исправить?

Спасибо MikroMike.

1 Ответ

0 голосов
/ 14 мая 2019

Решен мой собственный вопрос о сохранении компаний в db

  • Сначала получите общее число внутри массива
  • используйте цикл for, чтобы сделать подсчет
  • useцикл foreach извлекает информацию о каждой компании как объект.

    $data = json_decode($res->getBody()->getContents());
    $total = $data->totalResults;
    
    
    for ($i = 0; $i < $total; $i++){
    $NewCompany = new Company();
    
     foreach ($data->results as $company)
    {
     $name = $company->name;
     $businessId = $company->businessId;
     $companyForm = $company->companyForm;
     $registrationDate = $company->registrationDate;
    
    $array = [];
      Arr::set($array, 'vat_id', $businessId);
      Arr::set($array, 'name', $name );
      Arr::set($array, 'form', $companyForm);
      Arr::set($array, 'regdate', $registrationDate);
    
     $NewCompany = Company::updateOrCreate($array,[
    [ 'vat_id', $businessId],
    [ 'name', $name],
    [ 'form',$companyForm],
    [ 'regdate', $registrationDate],
    ]);
    
    
    }// END OF MAIN FOREACH
    }// END OF For loop
    }// END OF FUCNTION
    } // END OF CLASS
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...