Laravel - 如何将 API Rest 端点数据保存到我的数据库中

问题描述 投票:0回答:3

我在我的服务器中使用 Laravel 5.8。我有这个外部端点:

https://api.abclm.net/customerss/allcustomers

这是一个 GET 请求,JSON 格式如下所示。

[
  {
    "ClientID": "C001",
    "ClientName": "ABU PLC",
    "Address": "ADDRESS LINE 1",
    "City": "Lagos"
  },
    "ClientID": "C002",
    "ClientName": "ADE PLC",
    "Address": "ADDRESS LINE 1",
    "City": "Lagos"
  },
    "ClientID": "C003",
    "ClientName": "JACOB PLC",
    "Address": "ADDRESS LINE 1",
    "City": "Lagos"
  }
]

然后,在我的服务器中我有这张表:

 CREATE TABLE `customers` (
`id` int NOT NULL,
`client_id` varchar(255) UNIQUE NOT NULL,
`client_name` varchar(255) UNIQUE NOT NULL,
`address` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

模型类是Customer。

  1. client_id 和 client_name 是唯一的,应该作为参考点。

  2. 我想同时将端点中的所有数据保存在我的客户模型类中。

  3. 它应该更新 client_id 和 client_name 已存在的位置,但插入不存在的位置

  4. ClientID 转换为 client_id,ClientName 转换为 client_name,Address 转换为地址

我有这样的事情,但不知道如何继续:

     public function apiclient(Request $request)
{
        $array_content=[];

     $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.abclm.net/customerss/allcustomers");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Important
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
        $result = curl_exec($ch);

        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
        }
          curl_close ($ch);
    $i=0;
    foreach(...)
    {
    $newobj = new Clients();

    ....
    array_push($array_content,$newobj);

    $i++;
    }
    return $array_content;
}

我有类似的事情,但不知道该怎么办。请协助。 谢谢。

php laravel api
3个回答
1
投票

我发现这个 Guzzle 包装器比使用手动卷曲更容易。 http://docs.guzzlephp.org/en/stable/

$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.abclm.net/customerss/allcustomers');
return $res->getBody(); 

0
投票

收到 api 请求的响应后,您需要先将其转换为 json。为此,只需使用 php 中的

json_decode
函数即可。

$json_results = json_decode($result, true); // cast json to assoc array which you can easily use in for loop later

0
投票

由于结果是一个客户端数组,因此您需要循环遍历它。

因为它应该更新现有记录使用

updateOrCreate()
功能的位置。该函数的第一个参数是需要检查是否存在的键值数组。第二个参数是需要更新的键值数组。

// If the $result is an json string, use this to convert it to an array.
$clients = json_decode($result, true);

foreach($clients as $client) {
    Client::updateOrCreate([
        'client_id' => $client->ClientID,
        'client_name' => $client->ClientName,
    ],[
        'address' => $client->Address,
        'city' -> $client->City,
    ]);
}
© www.soinside.com 2019 - 2024. All rights reserved.