Laravel 将来自 API 的多个页面的数据存储到数据库中

时间:2021-07-05 18:48:14

标签: php laravel api eloquent laravel-8

我正在调用一个 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 来抵消结果,只是不确定我将如何动态执行此操作并继续遍历数据。

1 个答案:

答案 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.');
}