queryParameters->filter(); // collect sort options $sort = $this->queryParameters->sortFields(); // collect pagination based on the page $pagination = $this->filtersPagination($this->queryParameters->page()); // check if we need all accounts, regardless of pagination // This is necessary when the user wants to sort on specific params. $needsAll = $this->needsFullDataset('account', $sort); // params that were not recognised, may be my own custom stuff. $otherParams = $this->getOtherParams($this->queryParameters->unrecognisedParameters()); // start the query $query = $this->userGroup->accounts(); // if (!$needsAll) { // Log::debug('Does not need full dataset, will paginate.'); // $query = $this->addPagination($query, $pagination); // } // add sort and filter parameters to the query. $query = $this->addSortParams(Account::class, $query, $sort); $query = $this->addFilterParams(Account::class, $query, $filters); // collect the result. $collection = $query->get(['accounts.*']); // sort the data after the query, and return it right away. $sorted = $this->sortCollection(Account::class, $collection, $sort); // take from the collection the filtered page + page number: $currentPage = $sorted->skip($pagination['number'] - 1 * $pagination['size'])->take($pagination['size']); // enrich the current page. $enrichment = new AccountEnrichment(); $enrichment->setStart($otherParams['start'] ?? null); $enrichment->setEnd($otherParams['end'] ?? null); $currentPage = $enrichment->enrich($currentPage); // TODO add filters after the query, if there are filters that cannot be applied to the database // TODO same for sort things. return new LengthAwarePaginator($currentPage,$sorted->count(),$pagination['size'],$pagination['number']); } /** * @inheritDoc */ #[\Override] public function paginate(array $page): Page { die('here weare'); // TODO: Implement paginate() method. } /** * @inheritDoc */ #[\Override] public function getOrPaginate(?array $page): iterable { die('here weare'); // TODO: Implement getOrPaginate() method. } }