Improve Base collection, model and repository

- Add collection pipeline methods
- Add save collection method
This commit is contained in:
Hypolite Petovan 2020-01-13 22:18:45 -05:00
parent 559879f41f
commit 5ab898f67f
3 changed files with 90 additions and 3 deletions

View file

@ -28,6 +28,30 @@ abstract class BaseCollection extends \ArrayIterator
$this->totalCount = $totalCount ?? count($models);
}
/**
* @inheritDoc
*/
public function offsetSet($offset, $value)
{
if (is_null($offset)) {
$this->totalCount++;
}
parent::offsetSet($offset, $value);
}
/**
* @inheritDoc
*/
public function offsetUnset($offset)
{
if ($this->offsetExists($offset)) {
$this->totalCount--;
}
parent::offsetUnset($offset);
}
/**
* @return int
*/
@ -35,4 +59,42 @@ abstract class BaseCollection extends \ArrayIterator
{
return $this->totalCount;
}
/**
* Return the values from a single field in the collection
*
* @param string $column
* @param int|null $index_key
* @return array
* @see array_column()
*/
public function column($column, $index_key = null)
{
return array_column($this->getArrayCopy(), $column, $index_key);
}
/**
* Apply a callback function on all elements in the collection and returns a new collection with the updated elements
*
* @param callable $callback
* @return BaseCollection
* @see array_map()
*/
public function map(callable $callback)
{
return new static(array_map($callback, $this->getArrayCopy()), $this->getTotalCount());
}
/**
* Filters the collection based on a callback that returns a boolean whether the current item should be kept.
*
* @param callable|null $callback
* @param int $flag
* @return BaseCollection
* @see array_filter()
*/
public function filter(callable $callback = null, int $flag = 0)
{
return new static(array_filter($this->getArrayCopy(), $callback, $flag));
}
}