Ejemplo n.º 1
0
 /**
  * @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());
    }