/** * Returns a Page of entities meeting the paging restriction provided in the Pageable object. * * @param Pageable $pageable * * @return Page */ public function findAll(Pageable $pageable = null) { $model = self::$instance; $query = $model->query(); if ($pageable) { $fields = $pageable->fields(); $columns = !$fields->isNull() ? $fields->get() : ['*']; if (count($distinctFields = $pageable->distinctFields()->get()) > 0) { $query->getQuery()->distinct(); $columns = $distinctFields; } $filter = $pageable->filters(); if (!$filter->isNull()) { EloquentFilter::filter($query, $filter); } $sort = $pageable->sortings(); if (!$sort->isNull()) { EloquentSorter::sort($query, $sort); } $pageSize = $pageable->pageSize(); $pageSize = $pageSize > 0 ? $pageSize : 1; return new ResultPage($query->paginate($pageable->pageSize(), $columns, 'page', $pageable->pageNumber())->items(), $query->paginate()->total(), $pageable->pageNumber(), ceil($query->paginate()->total() / $pageSize)); } return new ResultPage($query->paginate($query->paginate()->total(), ['*'], 'page', 1)->items(), $query->paginate()->total(), 1, 1); }
/** * @param Pageable $pageable * * @return array|string */ protected function getPageColumns(Pageable $pageable) { $fields = $this->getColumns($pageable->fields()); $columns = !empty($fields) ? $fields : ['*']; if (count($pageable->distinctFields()->get()) > 0) { $columns = $this->getColumns($pageable->distinctFields()); $columns = empty($columns) ? ['*'] : $columns; $columns = 'DISTINCT ' . implode(', ', $columns); } return $columns; }
/** * Returns a Page of entities meeting the paging restriction provided in the Pageable object. * * @param Pageable $pageable * * @return Page */ public function findAll(Pageable $pageable = null) : Page { if (null === $pageable) { return new ResultPage($this->data, count($this->data), 1, 1); } $results = $this->findBy($pageable->filters(), $pageable->sortings()); if (0 !== count($pageable->distinctFields()->get())) { $results = $this->resultsWithDistinctFieldsOnly($pageable->distinctFields(), $results); } $pageSize = $pageable->pageSize() ? $pageable->pageSize() : 1; return new ResultPage(array_slice($results, $pageable->offset() - $pageable->pageSize(), $pageable->pageSize()), count($results), $pageable->pageNumber(), ceil(count($results) / $pageSize)); }