1
0
mirror of https://github.com/flextype/flextype.git synced 2025-08-12 16:14:16 +02:00

feat(element-queries): Collections API next round of implementation #436

This commit is contained in:
Awilum
2020-07-14 09:36:58 +03:00
parent ab60e79f94
commit 9fccf8f0d6

View File

@@ -71,14 +71,19 @@ class Collections
'ends_with' => Comparison::ENDS_WITH,
];
/**
* Collection
*
* @access private
*/
private $collection;
/**
* data array
* Criteria
*
* @var array
* @access public
* @access private
*/
public $array = [];
private $criteria;
/**
* Constructor
@@ -95,7 +100,7 @@ class Collections
*
* @param string $array Array
*
* @return static self reference
* @return
*
* @access public
*/
@@ -127,6 +132,14 @@ class Collections
return $this;
}
public function merge(...$arrays)
{
$this->collection = new ArrayCollection(
array_merge($this->collection->toArray(), ...$arrays)
);
return $this;
}
/**
* Sets the where expression to evaluate when this Criteria is searched for.
@@ -135,7 +148,7 @@ class Collections
* @param string $expr Expression @see $this->expression
* @param mixed $value Value
*
* @return static self reference
* @return
*
* @access public
*/
@@ -154,7 +167,7 @@ class Collections
* @param string $expr Expression @see $this->expression
* @param mixed $value Value
*
* @return static self reference
* @return
*
* @access public
*/
@@ -173,7 +186,7 @@ class Collections
* @param string $expr Expression @see $this->expression
* @param mixed $value Value
*
* @return static self reference
* @return
*
* @access public
*/
@@ -192,7 +205,7 @@ class Collections
* @param string $field The field path using dot notation.
* @param string $direction Sort direction: asc or desc
*
* @return static self reference
* @return
*
* @access public
*/
@@ -208,7 +221,7 @@ class Collections
*
* @param int|null $firstResult The value to set.
*
* @return static self reference
* @return
*
* @access public
*/
@@ -224,7 +237,7 @@ class Collections
*
* @param int|null $limit The value to set.
*
* @return static self reference
* @return
*
* @access public
*/
@@ -274,15 +287,75 @@ class Collections
/**
* Returns a single item of result.
*
* Moves the internal iterator position to the next element and returns this element.
*
* @return array Item
*
* @access public
*/
public function one() : array
public function next() : array
{
return Arr::undot($this->matchCollection()->next());
}
/**
* Returns a single item of result.
*
* Moves the internal iterator position to the next element and returns this element.
*
* @return array Item
*
* @access public
*/
public function shuffle() : array
{
return Arr::shuffle(Arr::undot(Arr::dot($this->matchCollection()->toArray())));;
}
/**
* Returns a single item of result.
*
* @return array Item
*
* @access public
*/
public function first() : array
{
return Arr::undot($this->matchCollection()->first());
}
/**
* Returns random item from result.
*
* @return array The array data.
*
* @access public
*/
public function random() : array
{
return Arr::random(Arr::undot(Arr::dot($this->matchCollection()->toArray())));
}
/**
* Extracts a slice of $length elements starting at position $offset from the Collection.
*
* If $length is null it returns all elements from $offset to the end of the Collection.
* Keys have to be preserved by this method. Calling this method will only return
* the selected slice and NOT change the elements contained in the collection slice is called on.
*
* @param int $offset Slice begin index.
* @param int|null $length Length of the slice.
*
* @return array The array data.
*
* @access public
*/
public function slice(int $offset = 0, int $limit = null) : array
{
return Arr::undot(Arr::dot($this->matchCollection()->slice($offset, $limit)));
}
/**
* Returns all results as an array.
*
@@ -300,7 +373,7 @@ class Collections
*
* @access protected
*/
protected function matchCollection()
public function matchCollection()
{
// Match collection
$collection = $this->collection->matching($this->criteria);