2017-09-24 2 views
0

회신 페이지를 쉽게 구분할 수 있도록 Laravel 페이징 도구를 사용하는 채팅 로그 뷰어가 있습니다. 불행히도 페이지 매김 기는 페이지의 수를 올바르게 렌더링하더라도 결과의 첫 페이지 만 반환합니다. 여기 Laravel 5 Paginator가 첫 번째 페이지 만 반환합니다.

컨트롤러 코드입니다 :

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_token을 생략하고 요청을 요청 측에서 반송 할 수 있습니까?

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

그것은 이전 페이지에 대한 레코드를 건너 뛰어야 당신은 얻을 것이다 :

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

가 그래서 그냥이 같은 오프셋 추가 할 시도 :

+0

페이지 매김을 생성하려면 paginate() 함수를 사용하십시오. 사용하기 쉽습니다. –

답변

1

당신은 항상이 쿼리의 모든 페이지에 첫번째 250 개 기록을 현재 페이지에 대한 레코드 만.

또한 LengthAwarePaginator 생성자에 잘못된 데이터를 전달합니다. 이것을 시도하십시오 :

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