我正在使用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
,特别是按照该顺序。
我怎么得到这个?请帮忙!!!
答案 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;
}