public function getIterator() : Traversable { if (null !== $this->iterator) { return $this->iterator; } if (empty($this->sparseRecords)) { return $this->iterator = new ArrayIterator(); } $findQuery = new FindQuery(); $findQuery->addOrQueries(...array_map(function (array $sparseRecord) : Query { return new Query($this->idFieldName, (string) $sparseRecord[$this->idFieldName]); }, $this->sparseRecords)); return $this->iterator = new IteratorIterator($this->repository->findByQuery($findQuery)); }
public function testAddMultipleOrQueries() { $findQuery = new FindQuery(); $findQuery->addOrQueries(new Query('foo', 'bar'), new Query('baz', 'bat', true)); $this->assertSame(['-query' => '(q1);(!q2)', '-q1' => 'foo', '-q1.value' => 'bar', '-q2' => 'baz', '-q2.value' => 'bat'], $findQuery->toParameters()); }
public function findByQuery(FindQuery $findQuery, array $sort = [], int $limit = null, int $offset = null) : CollectionInterface { $resultSet = $this->execute(new Command($this->layout, $findQuery->toParameters() + $this->createSortParameters($sort) + $this->createLimitAndOffsetParameters($limit, $offset) + ['-findquery' => null])); return $this->createCollection($resultSet); }
public function testFindByQueryWithParameters() { $entity = new stdClass(); $hydration = $this->prophesize(HydrationInterface::class); $hydration->hydrateNewEntity(['record-id' => 1, 'mod-id' => 1, 'foo' => 'bar'])->willReturn($entity); $repository = $this->createAssertiveRepository(function (Command $command) { $this->assertSame('-lay=foo&-query=%28q1%29&-q1=foo&-q1.value=bar&-sortfield1=foo&-sortorder1=ascend&-max=1&-skip=2' . '&-findquery', (string) $command); return new ItemCollection([['record-id' => 1, 'mod-id' => 1, 'foo' => 'bar']], 1); }, $hydration->reveal()); $query = new FindQuery(); $query->addOrQueries(new Query('foo', 'bar')); $this->assertSame([$entity], iterator_to_array($repository->findByQuery($query, ['foo' => 'ascend'], 1, 2))); }