Laravel:反转分页查询的结果

时间:2018-12-15 09:33:26

标签: php laravel pagination

我正在使用Laravel 5.6,并且想反转分页查询的结果。这就是我想要做的:

$chats = Chats::where('message_id', $message_id)->orderBy('id', 'DESC')->paginate(5);
if(!empty($chats)) {
    $data['messages'] = $chats->reverse()->values();
    $data['status'] = 200;
    $data['create_user_id'] = Auth::id();
}else{
    $data['error'] = "No chats available";
}

但是它从结果中删除了分页。假设我在表中有这10个值

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

现在我希望第一页结果中的6, 7, 8, 9, 10和第二页结果中的1, 2, 3, 4, 5,特别是按照该顺序。

我怎么得到这个?请帮忙!!!

2 个答案:

答案 0 :(得分:2)

好吧

->orderBy('id', 'DESC')

在您的分页查询中,应该给您

`10, 9, 8, 7, 6`

然后只需反转输出中的内容即可

`6, 7, 8, 9, 10`

代码示例:

// $chats here are instance of LengthAwarePaginator
// so we use ->items() to get the array of paginated objects
$chats = Chats::orderBy('id', 'desc')->paginate(5);
$data = [];

if ($chats->count()) {
    $data['reverseModels'] = collect($chats->items())->reverse();
    $data['reverseIds'] = collect($chats->items())->reverse()->pluck('id');
} else {
    $data['error'] = 'Error';
}

答案 1 :(得分:0)

我具有查看员工出勤情况的功能,在这里,我通过按降序排列日期来对结果进行分页。在这里,我得到了正确的结果,即从新参加到老参加。

    public function viewAttendance($id){
        $q = Attendance::where('emp_id','=',$id)
           ->orderBy('date','desc')
           ->select('attendance.*')
           ->paginate(10);
        return $q;
    }