/** * @test */ public function it_can_paginate() { $criteria = Criteria::fromQueryParameters('profile', ['page' => 2, 'per_page' => 2]); $page = $this->searchEngine->match($criteria)->take($criteria->paginating->offset, $criteria->paginating->itemsPerPage); $paginatedProfiles = iterator_to_array($page->getIterator()); self::assertSame([['id' => 'e3ad45ee-7cae-4cca-bd7b-2eb6b57b6457', 'name' => 'Trillian Astra']], $paginatedProfiles); }
/** * {@inheritdoc} */ public function build(QueryBuilder $queryBuilder, ResourceDefinition $resourceDefinition, Criteria $criteria) { $relationsToEmbed = $criteria->getEmbeding()->getRelations(); $fields = $resourceDefinition->getFields(); if (true === in_array('author', $relationsToEmbed, true)) { $authorIndex = array_search('author_id', $fields); $fields[$authorIndex] = <<<SQL ( SELECT row_to_json(d) FROM ( SELECT id, name FROM author WHERE author_id = author.id ) d ) AS author SQL; } foreach ($fields as $field) { $queryBuilder->addSelect($field); } $queryBuilder->from($resourceDefinition->getName()); }