【问题标题】:Api Response and Json laravel formatApi 响应和 Json laravel 格式
【发布时间】:2019-05-12 16:56:32
【问题描述】:

我正在使用 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循环只保存一个公司数据,什么是 最好的解决方法?

感谢 MikroMike。

【问题讨论】:

    标签: json foreach laravel-5.7


    【解决方案1】:

    解决了我自己将公司保存到 db 的问题

    • 首先获取数组中的总数
    • 使用for循环进行计数
    • 使用 foreach-loop 提取每个公司的信息作为对象。

      $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
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-04
      • 2017-11-21
      • 2023-03-16
      • 2018-09-15
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多