페이지네이션 처리된 쿼리빌더의 응답
// PostController
public function index()
{
return view('posts.index', ['posts'=>DB::table('posts')->paginate(20)]);
}
#몇 번째 페이지의 데이터를 표시할 것인지는 현재 URL에 전달된 page 쿼리 파라미터를 사용
#엘로퀀트 모델에는 모두 이 peginate() 메서드를 사용할 수 있다.
#뷰 파일에서 조회된 결과를 표시할 때 link() 메서드를 사용하면 테일윈드로 꾸민 페이지네이션
#HTML이 생성된다.
템플릿에서 페이지 링크 렌터딩하기
// posts/index.blade.php
<table>
@foreach ($posts as $post)
<tr><td>{{$post -> title}}</td></tr>
@endforeach
</table>
{{$posts -> links()}}
// 기본적으로 $posts->links() 메서드를 호출하면 내용이 출력된다. 결과는 생략.
현재 페이지 기준으로 몇 개의 링크가 표시될지
DB::table('posts')->paginate(10)->onEachSide(3);
// 출력 결과:
// 5 6 7 [8] 9 10 11
직접 페이지네이터 생성하기
#Illuminate\\Pagination\\Paginator
#Illuminate\\Pagination\\LengthAwarPaginator
#두 클래스가 존재
#Paginator는 이전, 다음 버튼만 제공
#LengthAwarPaginator는 개별 페이지 링크 생성을 위해 전체 페이지 수를 필요
#그러므로 데이터가 아주 많은 페이지는 DB에 부담을 줌
use Illuminate\\Http\\Request;
use Illuminate\\Pagination\\Paginator;
Route::get('people', function(Request $request){
$people = [...]; //사람들의 목록
$perPage = 15;
$offsetPages = $request->input('page', 1) - 1;
//페이지네이터가 데이터를 잘라주지 않으므로 직접 처리해야 한다.
$people = array_slice(
$people,
$offsetPages * $perPage,
$perPage
);
return new Paginator(
$people,
$perPage
)