我正在调用一个 API,它有 650 条记录,每页有 20 个结果。我想将返回的数据存储到我的数据库中的表中。我面临的问题是我不确定如何进入下一页并循环浏览这些结果。
这是我的调用,它获取前 20 个并存储它们
public function store(Request $request)
{
$getData = Http::get('https://example-url.com/Search?House=1&IsCurrentMember=true&skip=0&take=20');
$jsonResponse = $getData->json();
foreach ($jsonResponse['items'] as $mp) {
$mp = new Mp([
'id' => $mp['value']['id'],
'name' => $mp['value']['nameDisplayAs'],
'party' => $mp['value']['latestParty']['name'],
'constituency' => $mp['value']['latestHouseMembership']['membershipFrom'],
'county' => '',
'region' => '',
'country' => '',
'active' => $mp['value']['latestHouseMembership']['membershipStatus']['statusIsActive'],
'image' => $mp['value']['thumbnailUrl']
]);
$mp->save();
}
return view('admin.mps.index')->with('success', 'data was successfully add.');
}
这样做的最佳方法是什么?
编辑
以及 API 返回的结果
"totalResults": 650,
"resultContext": "",
"skip": 0,
"take": 20,
"links": [
{
"rel": "self",
"href": "/Members/Search?skip=0&take=20",
"method": "GET"
},
{
"rel": "page.next",
"href": "/Members/Search?skip=20&take=20",
"method": "GET"
},
{
"rel": "page.previous",
"href": "/Members/Search?skip=0&take=20",
"method": "GET"
}
]
我可以通过更改 URL 参数 skip=0
来抵消结果,只是不确定我将如何动态执行此操作并继续遍历数据。
答案 0 :(得分:0)
在 Laracasts 的帮助下,这里是我采用的解决方案。
public function store(Request $request)
{
$skip = 0;
$take = 20;
do {
$getData = Http::get('https://example-url.com/Search?House=1&IsCurrentMember=true&skip=' . $skip . '&take=' . $take);
$jsonResponse = $getData->json();
// save
$skip += $take;
} while ($jsonResponse['totalResults'] > $skip);
return view('admin.mps.index')->with('success', 'data was successfully add.');
}