我在服务器上使用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;
模型类是客户。
client_id和client_name是唯一的,应该作为参考点。
我想在我的客户模型类中同时将所有数据保存在端点中。
它应该更新client_id和client_name已经存在的位置,但在不存在的地方插入
将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;
}
我有类似的东西,但是不知道如何去做。请协助。谢谢。
答案 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