将Guzzle请求的JSON转换为Eloquent


Convert Guzzle requested JSON to Eloquent

我正在尝试将API对另一个Laravel网站的调用中的JSON转换为一个有说服力的模型,以将数据保存到本地web服务器。我在将主服务器请求的JSON转换为雄辩的保存方法时遇到问题。这是我的当前代码。

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

这也是数组$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"
    ]
]

如果有人想自己试用api来获得JSON响应,只需执行gethttp://new.fsvaos.net/api/central/airports?icao=[国际民航组织机场],您将获得来自世界各地的任何机场数据。

现在您已经添加了输出,这是显而易见的。你有一个带有子数组的数组,而不是一个对象。将您的机场对象分配更改为以下

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