当前代码需要分页和排序,我该怎么做?

this current code needs pagination and sort, how i do?

我写了一个获取用户列表的代码,在获取的数据上找到进度,但是我需要根据进度对asc进行排序,应该是分页,但我不知道该怎么做

由于用户多,有没有办法不用foreach,通过query进行分页排序?

下面是代码,是找进度的代码,不好用,因为用了foreach,有没有更好的办法??也需要分页

$users = \App\Models\ChallengeUserPivot::where('challenge_id', $challenge_id)->get();

foreach($users as $user){
    $user_data = \App\Models\User::where('id', $user['user_id'])->first();
    $temp_progress = [];
    $temp_progress['total'] = 0;
    $temp_progress['doing'] = 0;
    foreach($challenge->ChallengeMissions as $key => $mission){
        $temp = ChallengeFunction::missionState($user_data, $mission);
        $temp_progress['total'] += (int)$temp['have_to_mission_count'];
        $temp_progress['doing'] += $temp['cert_count'];
    }
    $user['progress'] = ($temp_progress['doing'] / $temp_progress['total']) * 100;
}
    

您需要在查询中添加一个限制器和一个偏移量,并为每个分页递增偏移量。所以在这里你需要指定你想要获得多少行(假设在这里插入限制):

\App\Models\ChallengeUserPivot::where('challenge_id', $challenge_id)->get(1000);

对于接下来的 1000 行,您需要添加 1000 行的偏移量。

所以第一行是 0-1000,接下来是 1000-2000,依此类推。这样一来,您就不需要在一次调用中获取所有行。