개발일기

Laravel - Pagination 사용법 본문

프로그래밍 언어/PHP - Laravel

Laravel - Pagination 사용법

Flashback 2022. 7. 23. 21:06
728x90
반응형

Laravel에서는 DB에 있는 내용을 불러올 때, 모든 내용을 한번에 불러와 나눠주는 것이 아니라 페이징 처리를 통해 DB 레코드들을 일정한 개수마다 가져와 페이지로 나눠 보여주는 기능을 제공한다.

 

0. Laravel의 Pagination의 작동방식

게시판 DB에 300개의 데이터가 저장되어있고 id값을 기준으로 오름차순 정렬한 후, pagination을 통해 15개의 데이터를 각 페이지마다 불러온다고 가정해보자. 총 20개의 페이지로 구성이 될 것 이다. 오름차순 정렬이기 때문에 1페이지는 286 ~ 300, 2페이지는 270 ~ 285 ... 의 id값을 가지는 데이터가 보여져야 한다. 라라벨의 pagination에서는 각 페이지를 구분할 때 url 뒷부분 ?page=1, ?page=2 라는 식으로 URL 파라미터를 추가한다. 추가된 URL 파라미터로 페이지가 구분되며 각 페이지에 해당하는 데이터를 불러와 보여준다.

즉, ?page=1은 286 ~ 300의 id값을 가지는 데이터, ?page=2에는 270~285의 id값을 가지는 데이터들이 보여지게 된다. pagination을 통해 SQL의 Limit와 Offset에 값을 추가하여 페이징 처리를 하는 것보다 더 효율적으로 진행할 수 있다. 이 외에도 다음 페이지의 URL, 총 데이터의 개수, 다음 페이지 존재 유무 등의 메서드 등의 부가적인 기능 등을 사용할 수 있다는 장점을 가지고 있다.

 

1. pagination 기본 사용법

$bbs = BBS::paginate(15);

BBS라는 모델을 페이징처리하는 코드이다. BBS모델에서 15개의 데이터 레코드를 가져오는 것을 뜻한다.

 

2. 쿼리 추가 pagination

where와 order 등의 조건과 정렬을 추가하여 페이징 처리를 진행할 수 있다.

$bbs = BBS::where('title', 'LIKE', '%음료수%')->orderBy('id', 'ASC')->paginate(15);

BBS모델의 title에 음료수라는 문자가 포함되어 있는 내용을 id순으로 오름차순시켜 각 페이지마다 15개씩 가져오는 쿼리를 예시로 만들었다.

 

3. pagination 렌더링

위와 같이 html 태그가 반환된다. 직접 꾸밀 수도 있다.

laravel의 pagination은 위와 같이 페이징 처리 관련 html 태그를 생성시켜 반환해준다.

{{ $bbs->links() }}

블레이드 템플릿에 위와 같은 코드를 작성하면 페이징 html 태그가 생성되어 렌더링된다. css style을 통해 기본적으로 생성된 페이징 디자인이 아니라 커스텀하게도 꾸밀 수 있다.

 

3-1. onEachSide

links()를 통해 렌더링 할 때, onEachSide를 추가하여 현재 페이지 번호의 앞 뒤에 몇 개의 페이지 버튼을 추가할지 정할 수 있다.

{{ $bbs->onEachSide(1)->links() }}

{{--   1 2 .. 9 10 11 .. 19 20   --}}
{{-- 현재 페이지 10. 앞 뒤로 1개씩 다음 페이지, 이전 페이지 버튼이 생성된다.  --}}
{{ $bbs->onEachSide(2)->links() }}

{{--   1 2 .. 8 9 10 11 12 .. 19 20   --}}
{{-- 현재 페이지 10. 앞 뒤로 2개씩 다음 페이지, 이전 페이지 버튼이 생성된다.  --}}

 

3-2. Query String 추가

pagination을 사용할 때, 단순히 목록 페이지만 넘기는 기능 이외에도 검색 기능을 추가하는 경우가 많다. 검색을 추가하면 검색에 대한 키워드 및 검색 타입에 관한 데이터가 필요하다. 단순히 links()를 통해 렌더링을 하면 키워드와 타입 등의 URL 파라미터는 없어지고 페이지 쪽수에 관한 파라미터만 추가되어 페이지가 이동한다.

키워드, 타입 등의 검색 요소에 관한 URL 파라미터도 추가하여 다음 페이지를 렌더링 하기 위해서는 withQueryString()을 추가해주면 된다.

{{ $bbs->withQueryString()->links() }}

단순하게 links() 앞에 withQueryString()을 추가해주면 페이지 링크 관련 뷰가 생성될 때, 각각의 버튼에 URL 파라미터가 추가된 상태로 URL이 생성된다.

 

4. 유용한 pagiantion 메서드

  • total() : 전체 데이터의 개수
{{ $bbs->total() }}
<!-- 모든 페이지를 포함한 총 데이터의 개수를 표시한다 -->

 

  • currentPage() : 현재 페이지 번호
{{ $bbs->currentPage() }}
{{-- 현재 페이지 번호를 나타낸다 --}}

 

  • lastPage() : 마지막 페이지 번호
{{ $bbs->lastPage() }}
{{-- 마지막 페이지 번호를 나타낸다 --}}

 


참고 사이트 : 

https://laravel.com/docs/8.x/pagination

 

Laravel - The PHP Framework For Web Artisans

Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.

laravel.com

 

https://stackoverflow.com/questions/24891276/how-to-automatically-append-query-string-to-laravel-pagination-links

 

How to automatically append query string to laravel pagination links?

I am working on search filter on checkbox click, with Laravel and Ajax call. So I get results when I click on a checkbox. my query is as follows: $editors = User::with(['editor.credentials','e...

stackoverflow.com

 

728x90
반응형
Comments