我在我的服务器中使用 Laravel 5.8。我有这个外部端点:
这是一个 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。
client_id 和 client_name 是唯一的,应该作为参考点。
我想同时将端点中的所有数据保存在我的客户模型类中。
它应该更新 client_id 和 client_name 已存在的位置,但插入不存在的位置
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;
}
我有类似的事情,但不知道该怎么办。请协助。 谢谢。
我发现这个 Guzzle 包装器比使用手动卷曲更容易。 http://docs.guzzlephp.org/en/stable/
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.abclm.net/customerss/allcustomers');
return $res->getBody();
收到 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
由于结果是一个客户端数组,因此您需要循环遍历它。
因为它应该更新现有记录使用
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,
]);
}