페이지네이션 처리된 쿼리빌더의 응답

// 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
)