2016-07-30 10 views
0

Ich versuche, die JSON von einem API-Aufruf zu einer anderen Laravel-Website in ein beredtes Modell zu konvertieren, um die Daten auf dem lokalen Webserver zu speichern. Ich habe ein Problem beim Konvertieren der vom Masterserver angeforderten JSON in eine beredte Speichermethode. Hier ist der aktuelle Code, den ich habe.Convert Guzzle angefordert JSON to Eloquent

public function add(Request $request) 
{ 
    // lets request the airport identifier from the central database 
    $client = new Client(); 
    $res = $client->request('GET', 'http://new.fsvaos.net/api/central/airports', [ 
     'query' => [ 
      'icao' => $request->icao, 
      ] 
     ])->getBody(); 
    // Convert the JSON to something good for Eloquent 
    $data = json_decode($res, true); 
    $airport = new Airport(); 
    //return $data; 
    $airport->id = $data->id; 
    $airport->name = $data->name; 
    $airport->icao = $data->icao; 
    $airport->lat = $data->lat; 
    $airport->lng = $data->lon; 
    $airport->hub = 0; 
    $airport->fuelprice = 0; 

    $airport->save(); 
} 

Was genau mache ich falsch?

EDIT: Hier ist die JSON-Antwort vom Master-Server, den ich zur lokalen Datenbank hinzufügen möchte.

{ 
    "id": 3682, 
    "name": "Hartsfield Jackson Atlanta Intl", 
    "city": "Atlanta", 
    "country": "United States", 
    "iata": "ATL", 
    "icao": "KATL", 
    "lat": "33.636719000000000", 
    "lon": "-84.428067000000000", 
    "alt": "1026", 
    "timezone": "-5.00", 
    "daylightsavings": "A", 
    "tz": "America/New_York" 
} 

Hier ist auch die Daten-Dump aus dem Array $ data

array:1 [▼ 
    0 => array:12 [▼ 
     "id" => 3682 
     "name" => "Hartsfield Jackson Atlanta Intl" 
     "city" => "Atlanta" 
     "country" => "United States" 
     "iata" => "ATL" 
     "icao" => "KATL" 
     "lat" => "33.636719000000000" 
     "lon" => "-84.428067000000000" 
     "alt" => "1026" 
     "timezone" => "-5.00" 
     "daylightsavings" => "A" 
     "tz" => "America/New_York" 
    ] 
] 

Wenn jemand will die api ausprobieren für sich selbst die JSON-Antwort zu erhalten, nur eine GET zu http://new.fsvaos.net/api/central/airports?icao=[AIRPORT ICAO tun] und Sie erhalten alle Flughafendaten aus der ganzen Welt.

+0

Eines der Probleme ist, dass Sie TRUE als zweiter Parameter sind vorbei json_decode anzeigt, dass Sie ein Array wollen, aber Sie verweisen die Eigenschaften als Objekt. Versuchen Sie, sie als $ data ['field'] zu referenzieren. Sie müssen auch die JSON-Antwort dd() eingeben und sie zu Ihrer Frage hinzufügen. Wir können Ihnen nicht helfen, wenn wir nicht wissen, wie die JSON-Antwort aussieht. –

+0

Ich habe gerade das OP bearbeitet, um Ihre Anfrage zu reflektieren. Ich habe auch versucht, das $ data ['field'] zu machen und bekomme dadurch einen unbekannten Fehler. –

Antwort

0

Jetzt, da Sie Ihre Ausgabe hinzugefügt haben, ist es klar. Sie haben ein Array mit einem Subarray, kein Objekt. Ändern Sie Ihr Flughafen-Objekt-Zuordnungen an folgende

$airport->id = $data[0]['id']; 
$airport->name = $data[0]['name']; 
$airport->icao = $data[0]['icao']; 
$airport->lat = $data[0]['lat']; 
$airport->lng = $data[0]['lon']; 
$airport->hub = 0; 
$airport->fuelprice = 0; 

$airport->save();