Ejemplo n.º 1
0
 public function testRead()
 {
     $data = [['id' => 1, 'name' => 'foo', 'group' => 'admin'], ['id' => 2, 'name' => 'bar', 'group' => 'user'], ['id' => 3, 'name' => 'foobar', 'group' => 'user'], ['id' => 4, 'name' => 'foo', 'group' => 'admin'], ['id' => 5, 'name' => 'baz', 'group' => 'user'], ['id' => 6, 'name' => 'foobaz', 'group' => 'user']];
     // Select all
     $source = new ArrayDataSource($data);
     $selection = new ReadSelectionBuilder($source);
     $this->assertEquals(6, count($selection->toArray()));
     $this->assertEquals($data, $selection->toArray());
     // Select with a predicate
     $source = new ArrayDataSource($data);
     $selection = new ReadSelectionBuilder($source);
     $selection = $selection->where('group = %s', 'user');
     $this->assertEquals(4, count($selection->toArray()));
     $this->assertNotContains($data[0], $selection->toArray());
     $this->assertContains($data[1], $selection->toArray());
     // Select with groups
     $source = new ArrayDataSource($data);
     $selection = new ReadSelectionBuilder($source);
     $selection = $selection->groupBy(['group']);
     $this->assertEquals(2, count($selection->toArray()));
     $source = new ArrayDataSource($data);
     $selection = new ReadSelectionBuilder($source);
     $selection = $selection->groupBy(['group', 'name'], E::e('name in %s()', ['foo', 'bar', 'foobar']));
     $this->assertEquals(3, count($selection->toArray()));
     // Select with limit
     $source = new ArrayDataSource($data);
     $selection = new ReadSelectionBuilder($source);
     $selection = $selection->limit(1);
     $this->assertEquals(1, count($selection->toArray()));
     $this->assertContains($data[0], $selection->toArray());
     // Select with projection
     $source = new ArrayDataSource($data);
     $selection = new ReadSelectionBuilder($source);
     $projection = $selection->select(['n' => 'name']);
     $this->assertEquals(6, iterator_count($projection));
     foreach ($projection as $record) {
         $this->assertEquals(['n'], array_keys($record));
     }
 }
Ejemplo n.º 2
0
 /**
  * Make a projection.
  *
  * @param string|string[]|Expression|Expression[] $expression
  *            Expression or array of expressions (if the keys are strings,
  *            they are used as aliases).
  * @param string $alias
  *            Alias.
  * @return \Iterator A {@see Record} iterator.
  * @todo Rename to 'project' ?
  */
 public function select($expression, $alias = null)
 {
     $selection = new ReadSelectionBuilder($this->getSource());
     return $selection->select($expression, $alias);
 }