- Fixed save() and saveAll() from repository - QueryBuilder can now be flushed after queries.
68 lines
1.6 KiB
PHP
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;
|
|
}
|
|
}
|