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

时间:2019-08-21 03:33:03

标签: laravel api

我在服务器上使用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;

模型类是客户。

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

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

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

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

我有类似的内容,但不知道如何继续:

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

我有类似的东西,但是不知道如何去做。请协助。谢谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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,
    ]);
}

答案 2 :(得分:0)

代替使用手动卷曲,此包装器可以简化此过程 http://docs.guzzlephp.org/en/stable/

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

希望有帮助help