ulmus/src/EntityCollection.php
Dave Mc Nicoll d1961ec807 - Work done on insert() and update() function from QueryBuilder.
- Fixed save() and saveAll() from repository
- QueryBuilder can now be flushed after queries.
2020-02-17 08:23:41 -05:00

68 lines
1.6 KiB
PHP

<?php
namespace Ulmus;
use Generator;
class EntityCollection extends \ArrayObject {
public function filters(Callable $callback) : Generator
{
$idx = 0;
foreach($this as $key => $item) {
if ( $callback($item, $key, $idx) ) {
$idx++;
yield $item;
}
}
}
public function filtersCollection(Callable $callback) : self
{
$collection = new static();
foreach($this->filters($callback) as $item) {
$collection->append($item);
}
return $collection;
}
public function searchOne($value, string $field) : object
{
# Returning first value only
foreach($this->search($value, $field) as $item) {
return $item;
}
}
public function search($value, string $field) : Generator
{
foreach($this->filters(fn($v) => $v->$field === $value) as $item) {
yield $item;
}
}
public function buildArray(string $keyColumn, /* string|callable */ $value) : array
{
$list = [];
foreach($this as $key => $item) {
switch (true) {
case is_string($value):
$list[$item->$keyColumn] = $item->$value;
break;
case is_callable($value):
$list[$item->$keyColumn] = $value($item);
break;
}
}
return $list;
}
}