Формат Api Response и Json 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],
 ]);

}

Если часть Parse и часть Save находятся внутри одного и того же кода функции, работает нормально (сохранение только одной компании),

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

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

" Using $this when not in object context" 

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

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

  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 сохраняет только данные одной компании, как лучше всего это исправить?

Спасибо МикроМайк.


person MikroMike    schedule 12.05.2019    source источник


Ответы (1)


Решил мой собственный вопрос по сохранению компаний в БД

  • Сначала получите общее число внутри массива
  • использовать цикл for для подсчета
  • использовать информацию извлечения цикла 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
    
person MikroMike    schedule 14.05.2019