/** * 주어진 db query를 실행한다. * * @param Builder $query 질의 * @param int|int[]|stdClass $navigation 검색시 사용할 navigation(page, perPage, sort, order) 정보 * * @return array */ protected function executeQuery($query, $navigation = null) { // set default $order = $this->defaultOrder; $sort = $this->defaultSort; $perPage = $this->defaultPerPage; $page = null; if (is_array($navigation)) { list($page, $perPage) = $navigation; } elseif (is_object($navigation)) { $page = data_get($navigation, 'page', $page); $perPage = data_get($navigation, 'perPage', $perPage); $order = data_get($navigation, 'order', $order); $sort = data_get($navigation, 'sort', $sort); } if ($sort !== null) { $query->orderBy($sort, $order); } if ($navigation === null) { $collection = $query->get(); } elseif ($page !== null) { $collection = $query->forPage($page, $perPage); } else { $collection = $query->paginate($perPage); } return $collection; }
protected function paginate(Builder $builder, $perPage) { $page = Paginator::resolveCurrentPage(); $total = $builder->count(); $query = $builder->forPage($page, $perPage); $results = $query->get(); return new LengthAwarePaginator($results, $total, $perPage, $page, ['path' => Paginator::resolveCurrentPath()]); }
/** * Paginate the given query. * * @param int $perPage * @param array $columns * @param string $pageName * @param int|null $page * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator * * @throws \InvalidArgumentException */ public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null) { if ($perPage <= 0) { throw new InvalidArgumentException("Negative 'perPage' value provided to 'paginate' method."); } $total = $this->query->getCountForPagination(); $this->query->forPage($page = $page ?: Paginator::resolveCurrentPage($pageName), $perPage = $perPage ?: $this->model->getPerPage()); return new LengthAwarePaginator($this->get($columns), $total, $perPage, $page, ['path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName]); }
/** * Get a paginator for an ungrouped statement. * * @param \Illuminate\Pagination\Environment $paginator * @param int $perPage * @param array $columns * @return \Illuminate\Pagination\Paginator */ protected function ungroupedPaginate($paginator, $perPage, $columns) { $total = $this->query->getPaginationCount(); // Once we have the paginator we need to set the limit and offset values for // the query so we can get the properly paginated items. Once we have an // array of items we can create the paginator instances for the items. $page = $paginator->getCurrentPage($total); $this->query->forPage($page, $perPage); return $paginator->make($this->get($columns)->all(), $total, $perPage); }
/** * Set the limit and offset for a given page. * * @param int $page * @param int $perPage * @return \Illuminate\Database\Query\Builder|static * @static */ public static function forPage($page, $perPage = 15) { return \Illuminate\Database\Query\Builder::forPage($page, $perPage); }
/** * Paginate the given query. * * @param int $perPage * @param array $columns * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator */ public function paginate($perPage = 15, $columns = ['*']) { $total = $this->query->getCountForPagination(); $this->query->forPage($page = Paginator::resolveCurrentPage(), $perPage = $perPage ?: $this->model->getPerPage()); return new LengthAwarePaginator($this->get($columns)->all(), $total, $perPage, $page, ['path' => Paginator::resolveCurrentPath()]); }
/** * Paginate the given query. * * @param int $perPage * @param array $columns * @param string $pageName * @param int|null $page * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator * * @throws \InvalidArgumentException */ public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null) { $total = $this->query->getCountForPagination(); $this->query->forPage($page = $page ?: Paginator::resolveCurrentPage($pageName), $perPage = $perPage ?: $this->model->getPerPage()); return new LengthAwarePaginator($this->get($columns), $total, $perPage, $page, ['path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName]); }