pagination¶
쿼리 빌더는 매우 단순한지만 유연한 페이지 관련 함수를 제공합니다.
$this->qb->setTotalRows()
검색된 전체 열의 수를 설정합니다.
$this->qb->pagination()
페이징 관련 연관배열을 반환합니다. 첫 번째 파라미터는 현재 페이지 번호, 두 번째 파라미터는 한 페이지에 표시할 줄 수입니다. 연관배열은 아래와 같이 구성되어 있습니다.
$this->qb->setTotalRows(1000); $this->qb->pagination(20, 15); // 결과 [ 'first_page' => 1, 'prev_jump' => 9, 'prev_page' => 19, 'cur_page' => 20, 'next_page' => 21, 'next_jump' => 31, 'last_page' => 67, 'page_list' => [ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], 'per_page' => 15, 'qry_str' => '', 'offset' => 285 ]각 컬럼별 설명은 아래와 같습니다.
Key 설명 first_page 첫 번째 페이지 prev_jump per_page 단위 이전 페이지 prev_page 이전 페이지 cur_page 현재 페이지 next_page 다음 페이지 next_jump per_page 단위 다음 페이지 last_page 마지막 페이지 page_list 출력될 페이지 연관배열 per_page 한 페이지당 출력될 줄 수 offset limit offset qry_str 검색에 필요한 query string (사용안함)
DB 사용 예¶
// 쿼리를 재사용하기 위해 쿼리 빌더 캐싱 사용
$this->qb->startCache();
$this->qb
->from('myTable')
->where('id', 1);
if ($status != '') {
$this->qb->where('status', $status);
}
// 쿼리 빌더 캐싱 정지
$this->qb->stopCache();
// 전체 열의 수
$tRowCnt = $this->qb->getCount();
// 페이징 설정
$paging = $this->qb
->setTotalRows($tRowCnt)
->pagination($cur_page, $per_page); // $cur_page : 현재 페이지, $per_page : 페이지당 표시할 줄수
// limit 값 산출
$limit = $per_page;
$offset = $paging['offset'];
// Limit 설정을 통한 데이터 검색
$rows = $this->qb
->select('name')
->select('address')
->select('tel')
->orderBy('id', 'desc')
->limit($limit, $offset)
->exec()
->getResultArray();
// 쿼리 빌더 캐시 리셋
$this->qb->flushCache();
$data = [
'list' => $rows
, 'paging' => $paging
]