当前代码需要分页和排序,我该怎么做?
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,依此类推。这样一来,您就不需要在一次调用中获取所有行。
我写了一个获取用户列表的代码,在获取的数据上找到进度,但是我需要根据进度对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,依此类推。这样一来,您就不需要在一次调用中获取所有行。