2017-09-24 11 views
0

私はかなり簡単なチャットログビューアを使用しています。これはLaravelページを使用して返されたログを簡単にページに分割します。残念ながら、ページ数を正しくレンダリングしても、ページャーは結果の最初のページを返すだけです。Laravel 5 Paginatorは最初のページのみを返します

ここでコントローラのコードです:

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 

私は尋ねた他の質問から物事の束を試してみた:

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')); 
} 

そして、ここでは、フォームでページを生成した要求のようなルックスを使用するものだが、ここでは役に立たない。私はPaginator::resolveCurrentPage()を使ってリクエストから直接ページを引っ張ってみましたが、成功しませんでした。それを機能させるものは何もないようです。

奇妙なことに、simplePaginateを使用する同じコントローラのインデックスビューは正常に機能します。フォームはLaravel Collectiveフォームで作成されていますが、csrf_tokenを省略してリクエスト側でリクエストをバウンスさせることができますか?

+0

ページングを作成するには、paginate()関数を使用してください。それは使いやすいです。 –

答えて

1

あなたは、常にこのクエリを持つすべてのページの最初の250件のレコードを取る:それは、前のページのレコードをスキップしなければならないし、あなたが得る

$query->skip($limit*$page)->take($limit)->get() 

$query->take($limit)->get() 

をだから、このようにオフセットaddがしてみてください現在のページのレコードのみ。

また、LengthAwarePaginatorコンストラクタに間違ったデータを渡します。これを試してください:

$messages = new LengthAwarePaginator(
     $messageResults->all(), 
     ChatMessage::count(),//total count 
     $limit,//items per page 
     $page,//current page 
     ['path' => Paginator::resolveCurrentPath(), 'query' => $request->query()] 
    ); 
関連する問題