2016-07-30 2 views
0

Я пытаюсь преобразовать JSON из вызова API на другой сайт Laravel в красноречивую модель, чтобы сохранить данные на локальном веб-сервере. У меня возникла проблема с преобразованием JSON, запрошенным с главного сервера, в красноречивый метод сохранения. Вот текущий код, который у меня есть.Convert Guzzle запросил JSON для 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(); 
} 

Что именно я делаю неправильно?

EDIT: Вот ответ JSON от главного сервера, который я хочу добавить в локальную базу данных.

{ 
    "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" 
} 

Здесь также дамп данных из массива $ данных

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" 
    ] 
] 

Если кто-то хочет попробовать АНИ для себя, чтобы получить ответ JSON, просто сделать GET для http://new.fsvaos.net/api/central/airports?icao=[AIRPORT ИКАО] и вы получите информацию о любом аэропорту со всего мира.

+0

Одной из проблем является то, вы передаете значение TRUE в качестве второго параметра json_decode показывая, что вы хотите массив, но вы ссылаетесь свойства как объект. Попробуйте указать их как $ data ['field']. Вам также необходимо выполнить dd() ответ JSON и добавить его в свой вопрос. Мы не можем вам помочь, если мы не знаем, как выглядит ответ JSON. –

+0

Я только что отредактировал OP, чтобы отразить ваш запрос. Я также попытался сделать $ data ['field'], и я получил неизвестную ошибку. –

ответ

0

Теперь, когда вы добавили свой результат, это понятно. У вас есть массив с подмассивом, а не с объектом. Измените объект назначение Аэропорта следующие

$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();