limit($data['options']['limit'] + 1)->all(); } /** * @inheritDoc */ protected function buildParams(array $data): array { $hasNextPage = false; if ($this->pagingParams['count'] > $data['options']['limit']) { $hasNextPage = true; $this->pagingParams['count'] -= 1; } parent::buildParams($data); $this->pagingParams['hasNextPage'] = $hasNextPage; return $this->pagingParams; } /** * Build paginated result set. * * Since the query fetches an extra record, drop the last record if records * fetched exceeds the limit/per page. * * @param \Cake\Datasource\ResultSetInterface $items * @param array $pagingParams * @return \Cake\Datasource\Paging\PaginatedInterface */ protected function buildPaginated(ResultSetInterface $items, array $pagingParams): PaginatedInterface { if (count($items) > $this->pagingParams['perPage']) { $items = $items->take($this->pagingParams['perPage']); } return new PaginatedResultSet($items, $pagingParams); } /** * Simple pagination does not perform any count query, so this method returns `null`. * * @param \Cake\Datasource\QueryInterface $query Query instance. * @param array $data Pagination data. * @return int|null */ protected function getCount(QueryInterface $query, array $data): ?int { return null; } }