Php Laravel 5分页器仅返回第一页
我有一个相当简单的聊天日志查看器,它使用Laravel paginator轻松地将返回的日志分离到页面中。不幸的是,paginator只返回结果的第一页,即使它正确地呈现了页数 以下是控制器代码:Php Laravel 5分页器仅返回第一页,php,laravel-5,pagination,Php,Laravel 5,Pagination,我有一个相当简单的聊天日志查看器,它使用Laravel paginator轻松地将返回的日志分离到页面中。不幸的是,paginator只返回结果的第一页,即使它正确地呈现了页数 以下是控制器代码: public function search(Requests\ChatSearchRequest $request) { //split search up into what we've got $request->flash(); $nick = $reques
public function search(Requests\ChatSearchRequest $request)
{
//split search up into what we've got
$request->flash();
$nick = $request->input('nick');
$message = $request->input('message');
$channel = $request->input('channel');
$time_start = $request->input('datestart');
$time_end = $request->input('dateend');
$sortby = $request->input('sortby');
$limit = (int) $request->input('limit');
$page = (int) $request->input('page');
$query = ChatMessage::query();
if (!empty($nick))
$query->usersLike($nick);
if (!empty($channel))
$query->fromChannel($channel);
if (!empty($message))
$query->matchMessage($message);
if (!empty($time_start))
$query->betweenTimes($time_start, $time_end);
$query->orderBy('id', $sortby);
$messageResults = $query->take($limit)->get();
$messages = new LengthAwarePaginator($messageResults->all(), $messageResults->count(), 100, $page, ['path' => Paginator::resolveCurrentPath(), 'query' => $request->query()]);
return view('chatlog', compact('messages'));
}
页面使用的表单生成的请求如下所示:
http://localhost/chatlog/search?message=&nick=Saten&channel=&datestart=2017-09-17T14%3A50%3A44&dateend=2017-09-24T14%3A50%3A44&limit=250&sortby=desc&page=3
我试过很多其他问题,但都没有用。我尝试使用Paginator::resolveCurrentPage()
代替直接从请求中提取页面,但没有成功。似乎没有什么能使它起作用
奇怪的是,使用simplePaginate的同一控制器上的索引视图工作得很好。该表单是使用Laravel Collective表单构建的,是否会忽略csrf_令牌并使请求在请求端反弹?您始终使用此查询获取所有页面的前250条记录:
$query->take($limit)->get()
因此,请尝试按如下方式添加偏移量:
$query->skip($limit*$page)->take($limit)->get()
它应该跳过上一页的记录,您将只获得当前页的记录
您还将错误的数据传递给LengthAwarePaginator
构造函数。试试这个:
$messages = new LengthAwarePaginator(
$messageResults->all(),
ChatMessage::count(),//total count
$limit,//items per page
$page,//current page
['path' => Paginator::resolveCurrentPath(), 'query' => $request->query()]
);
使用paginate()函数创建分页。它很容易使用。