【问题标题】:Laravel 5 Paginator returns first page onlyLaravel 5 Paginator 仅返回首页
【发布时间】:2017-09-24 15:00:48
【问题描述】:

我有一个相当简单的聊天日志查看器,它使用 Laravel 分页器轻松地将返回的日志分成页面。不幸的是,分页器只返回结果的第一页,即使它正确呈现了页数。

这是控制器代码:

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 集体表单构建的,是否可以省略 csrf_token 并使请求在请求端反弹?

【问题讨论】:

  • 使用 paginate() 函数创建分页。它易于使用。

标签: php laravel-5 pagination


【解决方案1】:

您始终使用此查询获取所有页面的前 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()]
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 2018-08-23
    • 2015-07-16
    • 2015-10-22
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多