【问题标题】:Populating Database from Api Response in Php Laravel从 Php Laravel 中的 Api 响应填充数据库
【发布时间】:2020-11-29 10:49:04
【问题描述】:

请我在尝试从 Guzzlehttp 访问此 Api 响应时感到头疼,格式是这里的问题,我不明白我需要帮助。

大家好!请我在尝试从 Guzzlehttp 访问此 Api 响应时一直头疼,格式是这里的问题,我不明白我需要帮助。

这是代码


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use GuzzleHttp\Client;
use App\Country;
use App\Globas;

class DataController extends Controller
{
public function getClient(){
  $client=new Client();
  $response = $client->request('GET', 'https://api.covid19api.com/summary');
  $data= json_decode($response->getBody()->getContents(),true);

//delete all row in the database table
Globas::truncate();
Country::truncate();
  foreach($data as $da){
   Globas::create($da);
   Country::create([
       'Country'=> $data['Country'],
       'CountryCode'=>$data['CountryCode'],
       'Slug'=>$data['Slug'],
       'Date'=>$data['Date'],
       'NewConfirmed'=>$data['NewConfirmed'],
        'TotalConfirmed'=>$data['TotalConfirmed'],
           'NewRecovered'=>$data['NewRecovered'],
              'TotalRecovered'=>$data['TotalRecovered'],
               'NewDeaths'=>$data['NewDeaths'],
               'TotalDeaths'=>$data['TotalDeaths']
   ]);
return $data;
  }
}

}

**This is the Response** 

{"Global":

{"NewConfirmed":259470,"TotalConfirmed":19636772,"NewDeaths":5457,"TotalDeaths":726765,"NewRecovered":201182,"TotalRecovered":11938458},"Countries":[{"Country":"Afghanistan","CountryCode":"AF","Slug":"afghanistan","NewConfirmed":39,"TotalConfirmed":37054,"NewDeaths":5,"TotalDeaths":1312,"NewRecovered":57,"TotalRecovered":25960,"Date":"2020-08-09T17:38:36Z","Premium":[]},

......

{"Country":"Zimbabwe","CountryCode":"ZW","Slug":"zimbabwe","NewConfirmed":124,"TotalConfirmed":4575,"NewDeaths":0,"TotalDeaths":102,"NewRecovered":71,"Total``Recovered":1416,"Date":"2020-08-09T17:38:36Z","Premium":[]}],"Date":"2020-08-09T17:38:36Z"}


**Country Model**

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Country extends Model
{
   protected $fillable=['Country','CountryCode','Slug','Date',
   'NewConfirmed', 'TotalConfirmed','NewRecovered','TotalRecovered','NewDeaths','TotalDeaths'];
}

**Globas Model**

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Globas extends Model
{
   protected $fillable=['NewConfirmed','TotalConfirmed','NewRecovered','TotalRecovered','NewDeaths','TotalDeaths'];
}

谢谢...

【问题讨论】:

    标签: php database laravel api guzzle


    【解决方案1】:

    在 foreach 中你应该引用 $da 变量,而不是那个地方的 $data:

    Country::create([
           'Country'=> $data['Country'],
           'CountryCode'=>$data['CountryCode'],
           'Slug'=>$data['Slug'],
           'Date'=>$data['Date'],
           'NewConfirmed'=>$data['NewConfirmed'],
            'TotalConfirmed'=>$data['TotalConfirmed'],
               'NewRecovered'=>$data['NewRecovered'],
                  'TotalRecovered'=>$data['TotalRecovered'],
                   'NewDeaths'=>$data['NewDeaths'],
                   'TotalDeaths'=>$data['TotalDeaths']
       ]);
    

    另一点是国家也是一个数组,所以你可能应该为国家再做一个 foreach。

    foreach ($data['Countries'] as $country)
    {
    
    }
    

    【讨论】:

      【解决方案2】:

      我得到了 ErrorException (E_NOTICE) 未定义索引:NewConfirmed

      当我做这样的事情时

       foreach($data['Countries'] as $country){
      
      
           $counter=   Country::create([
                     'Country'=> $country['Country'],
                     'CountryCode'=>$country['CountryCode'],
                     'Slug'=>$country['Slug'],
                     'Date'=>$country['Date'],
                     'NewConfirmed'=>$country['NewConfirmed'],
                      'TotalConfirmed'=>$country['TotalConfirmed'],
                         'NewRecovered'=>$country['NewRecovered'],
                            'TotalRecovered'=>$country['TotalRecovered'],
                             'NewDeaths'=>$country['NewDeaths'],
                             'TotalDeaths'=>$country['TotalDeaths']
                 ]);
      
                  }
      
      
         foreach($data as $da){
          $globals=Globas::create([
              'NewConfirmed'=>$da['NewConfirmed'],
              'TotalConfirmed'=>$da['TotalConfirmed'],
                             'NewRecovered'=>$da['NewRecovered'],
                                'TotalRecovered'=>$da['TotalRecovered'],
                                 'NewDeaths'=>$da['NewDeaths'],
                                 'TotalDeaths'=>$da['TotalDeaths']
          ]);
          
          }
      }
      

      【讨论】:

        【解决方案3】:

        您必须为Global::create()Country::create() 的返回值分配一个变量。像这样$global = Global::create(...) 运行$global-&gt;save() 将其存储在数据库中。

        编辑:根据您的最新回复,您不应该迭代数据,因为返回的数据不是数组。对于全局变量,您不需要迭代。你可以这样做:

        $response = $client->request('GET', 'https://api.covid19api.com/summary');
        $data = json_decode($response->getBody()->getContents(),true);
        
        $globals=Globas::create([
            'NewConfirmed'=>$data['NewConfirmed'],
            'TotalConfirmed'=>$data['TotalConfirmed'],
            'NewRecovered'=>$data['NewRecovered'],
            'TotalRecovered'=>$data['TotalRecovered'],
            'NewDeaths'=>$data['NewDeaths'],
            'TotalDeaths'=>$data['TotalDeaths']
        ]);
        
        $globals->save();
        
        foreach($data['Countries'] as $country) {
             $country = Country::create([
                       'Country'=> $country['Country'],
                       'CountryCode'=>$country['CountryCode'],
                       'Slug'=>$country['Slug'],
                       'Date'=>$country['Date'],
                       'NewConfirmed'=>$country['NewConfirmed'],
                       'TotalConfirmed'=>$country['TotalConfirmed'],
                       'NewRecovered'=>$country['NewRecovered'],
                       'TotalRecovered'=>$country['TotalRecovered'],
                       'NewDeaths'=>$country['NewDeaths'],
                       'TotalDeaths'=>$country['TotalDeaths']
                   ]);
        
            $country->save();
        }
        

        【讨论】:

          猜你喜欢
          • 2021-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-03
          • 2014-02-07
          • 1970-01-01
          • 2016-05-27
          相关资源
          最近更新 更多