Class ResultSet
Represents the results obtained after executing a query for a specific table This object is responsible for correctly nesting result keys reported from the query, casting each field to the correct type and executing the extra queries required for eager loading external associations.
Properties summary
- $_autoFields protected
bool|null
Tracks value of $_autoFields property of $query passed to constructor.
- $_containMap protected
array
List of associations that should be eager loaded.
- $_count protected
int
Holds the count of records in this result set
- $_current protected
array|object
Last record fetched from the statement
- $_defaultAlias protected
string
The default table alias
- $_defaultTable protected
\Cake\ORM\Table
Default table instance
- $_driver protected
\Cake\Database\DriverInterface
The Database driver object.
- $_entityClass protected
string
The fully namespaced name of the class to use for hydrating results
- $_hydrate protected
bool
Whether to hydrate results into objects or not
- $_index protected
int
Points to the next record number that should be fetched
- $_map protected
array
Map of fields that are fetched from the statement with their type and the table they belong to
- $_matchingMap protected
array
List of associations that should be placed under the
_matchingData
result key. - $_matchingMapColumns protected
array
List of matching associations and the column keys to expect from each of them.
- $_results protected
array|\SplFixedArray
Results that have been fetched or hydrated into the results.
- $_statement protected
\Cake\Database\StatementInterface
Database statement holding the results
- $_useBuffering protected
bool
Whether or not to buffer results fetched from the statement
Method Summary
- __debugInfo() public
Returns an array that can be used to describe the internal state of this object.
- _calculateAssociationMap() protected
Calculates the list of associations that should get eager loaded when fetching each record
- _calculateColumnMap() protected
Creates a map of row keys out of the query select clause that can be used to hydrate nested result sets more quickly.
- _createMatcherFilter() protected
Returns a callable that receives a value and will return whether or not it matches certain condition.
- _extract() protected
Returns a column from $data that can be extracted by iterating over the column names contained in $path.
- _fetchResult() protected
Helper function to fetch the next result from the statement or seeded results.
- _propertyExtractor() protected
Returns a callable that can be used to extract a property or column from an array or object based on a dot separated path.
- _simpleExtract() protected
Returns a column from $data that can be extracted by iterating over the column names contained in $path
- append() public
Returns a new collection as the result of concatenating the list of elements in this collection with the passed list of elements
- cartesianProduct() public
Create a new collection that is the cartesian product of the current collection
- combine() public
Returns a new collection where the values extracted based on a value path and then indexed by a key path. Optionally this method can produce parent groups based on a group property path.
- compile() public
Iterates once all elements in this collection and executes all stacked operations of them, finally it returns a new collection with the result.
- contains() public
Returns true if $value is present in this collection. Comparisons are made both by value and type.
- countBy() public
Sorts a list into groups and returns a count for the number of elements in each group. Similar to groupBy, but instead of returning a list of values, returns a count for the number of values in that group.
- countKeys() public
Returns the number of unique keys in this iterator. This is the same as the number of elements the collection will contain after calling
toArray()
- every() public
Returns true if all values in this collection pass the truth test provided in the callback.
- extract() public
Returns a new collection containing the column or property value found in each of the elements.
- filter() public
Looks through each value in the collection, and returns another collection with all the values that pass a truth test. Only the values for which the callback returns true will be present in the resulting collection.
- firstMatch() public
Returns the first result matching all of the key-value pairs listed in conditions.
- groupBy() public
Splits a collection into sets, grouped by the result of running each value through the callback. If $callback is a string instead of a callable, groups by the property named by $callback on each of the values.
- indexBy() public
Given a list and a callback function that returns a key for each element in the list (or a property name), returns an object with an index of each item.
- insert() public
Returns a new collection containing each of the elements found in
$values
as a property inside the corresponding elements in this collection. The property where the values will be inserted is described by the$path
parameter. - jsonSerialize() public
Returns the data that can be converted to JSON. This returns the same data as
toArray()
which contains only unique keys. - lazy() public
Returns a new collection where any operations chained after it are guaranteed to be run lazily. That is, elements will be yieleded one at a time.
- listNested() public
Returns a new collection with each of the elements of this collection after flattening the tree structure. The tree structure is defined by nesting elements under a key with a known name. It is possible to specify such name by using the '$nestingKey' parameter.
- map() public
Returns another collection after modifying each of the values in this one using the provided callable.
- match() public
Looks through each value in the list, returning a Collection of all the values that contain all of the key-value pairs listed in $conditions.
- nest() public
Returns a new collection where the values are nested in a tree-like structure based on an id property path and a parent id property path.
- optimizeUnwrap() protected
Unwraps this iterator and returns the simplest traversable that can be used for getting the data out
- reduce() public
Folds the values in this collection to a single value, as the result of applying the callback function to all elements. $zero is the initial state of the reduction, and each successive step of it should be returned by the callback function.
- reject() public
Looks through each value in the collection, and returns another collection with all the values that do not pass a truth test. This is the opposite of
filter
. - shuffle() public
Returns a new collection with the elements placed in a random order, this function does not preserve the original keys in the collection.
- skip() public
Returns a new collection that will skip the specified amount of elements at the beginning of the iteration.
- some() public
Returns true if any of the values in this collection pass the truth test provided in the callback.
- sortBy() public
Returns a sorted iterator out of the elements in this collection, ranked in ascending order by the results of running each value through a callback. $callback can also be a string representing the column or property name.
- stopWhen() public
Creates a new collection that when iterated will stop yielding results if the provided condition evaluates to true.
- sumOf() public
Returns the total sum of all the values extracted with $matcher or of this collection.
- take() public
Returns a new collection with maximum $size elements in the internal order this collection was created. If a second parameter is passed, it will determine from what position to start taking elements.
- unfold() public
Creates a new collection where the items are the concatenation of the lists of items generated by the transformer function applied to each item in the original collection.
- unwrap() public
Returns the closest nested iterator that can be safely traversed without losing any possible transformations. This is used mainly to remove empty IteratorIterator wrappers that can only slowdown the iteration process.
- zip() public
Combines the elements of this collection with each of the elements of the passed iterables, using their positional index as a reference.
- zipWith() public
Combines the elements of this collection with each of the elements of the passed iterables, using their positional index as a reference.
Method Detail
__construct() public
__construct(\Cake\ORM\Query $query, \Cake\Database\StatementInterface $statement)
Constructor
Parameters
-
\Cake\ORM\Query
$query Query from where results come
-
\Cake\Database\StatementInterface
$statement The statement to fetch from
__debugInfo() public
__debugInfo()
Returns an array that can be used to describe the internal state of this object.
Returns
array
_calculateAssociationMap() protected
_calculateAssociationMap(\Cake\ORM\Query $query)
Calculates the list of associations that should get eager loaded when fetching each record
Parameters
-
\Cake\ORM\Query
$query The query from where to derive the associations
_calculateColumnMap() protected
_calculateColumnMap(\Cake\ORM\Query $query)
Creates a map of row keys out of the query select clause that can be used to hydrate nested result sets more quickly.
Parameters
-
\Cake\ORM\Query
$query The query from where to derive the column map
_createMatcherFilter() protected
_createMatcherFilter(array $conditions)
Returns a callable that receives a value and will return whether or not it matches certain condition.
Parameters
-
array
$conditions A key-value list of conditions to match where the key is the property path to get from the current item and the value is the value to be compared the item with.
Returns
\Closure
_extract() protected
_extract(mixed $data, array $path)
Returns a column from $data that can be extracted by iterating over the column names contained in $path.
It will return arrays for elements in represented with {*}
Parameters
-
array|\ArrayAccess
$data Data.
-
string[]
$path Path to extract from.
Returns
mixed
_fetchResult() protected
_fetchResult()
Helper function to fetch the next result from the statement or seeded results.
Returns
mixed
_groupResult() protected
_groupResult(array $row)
Correctly nests results keys including those coming from associations
Parameters
-
array
$row Array containing columns and values or false if there is no results
Returns
array|\Cake\Datasource\EntityInterface
Results
_propertyExtractor() protected
_propertyExtractor(mixed $callback)
Returns a callable that can be used to extract a property or column from an array or object based on a dot separated path.
Parameters
-
string|callable
$callback A dot separated path of column to follow so that the final one can be returned or a callable that will take care of doing that.
Returns
callable
_simpleExtract() protected
_simpleExtract(mixed $data, array $path)
Returns a column from $data that can be extracted by iterating over the column names contained in $path
Parameters
-
array|\ArrayAccess
$data Data.
-
string[]
$path Path to extract from.
Returns
mixed
append() public
append(mixed $items)
Returns a new collection as the result of concatenating the list of elements in this collection with the passed list of elements
Parameters
-
iterable
$items Items list.
Returns
self
appendItem() public
appendItem(mixed $item, mixed $key)
Append a single item creating a new collection.
Parameters
-
mixed
$item The item to append.
-
mixed
$key optional The key to append the item with. If null a key will be generated.
Returns
self
avg() public
avg(mixed $path)
Returns the average of all the values extracted with $path or of this collection.
Example:
$items = [ ['invoice' => ['total' => 100]], ['invoice' => ['total' => 200]] ]; $total = (new Collection($items))->avg('invoice.total'); // Total: 150 $total = (new Collection([1, 2, 3]))->avg(); // Total: 2
Parameters
-
string|callable|null
$path optional The property name to sum or a function If no value is passed, an identity function will be used. that will return the value of the property to sum.
Returns
float|int|null
buffered() public
buffered()
Returns a new collection where the operations performed by this collection.
No matter how many times the new collection is iterated, those operations will only be performed once.
This can also be used to make any non-rewindable iterator rewindable.
Returns
self
cartesianProduct() public
cartesianProduct(?callable $operation, ?callable $filter)
Create a new collection that is the cartesian product of the current collection
In order to create a carteisan product a collection must contain a single dimension of data.
Example
$collection = new Collection([['A', 'B', 'C'], [1, 2, 3]]); $result = $collection->cartesianProduct()->toArray(); $expected = [ ['A', 1], ['A', 2], ['A', 3], ['B', 1], ['B', 2], ['B', 3], ['C', 1], ['C', 2], ['C', 3], ];
Parameters
-
callable|null
$operation optional A callable that allows you to customize the product result.
-
callable|null
$filter optional A filtering callback that must return true for a result to be part of the final results.
Returns
\Cake\Collection\CollectionInterface
Throws
LogicException
chunk() public
chunk(int $chunkSize)
Breaks the collection into smaller arrays of the given size.
Example:
$items [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; $chunked = (new Collection($items))->chunk(3)->toList(); // Returns [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]
Parameters
-
int
$chunkSize The maximum size for each chunk
Returns
self
chunkWithKeys() public
chunkWithKeys(int $chunkSize, bool $preserveKeys)
Breaks the collection into smaller arrays of the given size.
Example:
$items ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6]; $chunked = (new Collection($items))->chunkWithKeys(3)->toList(); // Returns [['a' => 1, 'b' => 2, 'c' => 3], ['d' => 4, 'e' => 5, 'f' => 6]]
Parameters
-
int
$chunkSize The maximum size for each chunk
-
bool
$preserveKeys optional If the keys of the array should be preserved
Returns
self
combine() public
combine(mixed $keyPath, mixed $valuePath, mixed $groupPath)
Returns a new collection where the values extracted based on a value path and then indexed by a key path. Optionally this method can produce parent groups based on a group property path.
Examples:
$items = [ ['id' => 1, 'name' => 'foo', 'parent' => 'a'], ['id' => 2, 'name' => 'bar', 'parent' => 'b'], ['id' => 3, 'name' => 'baz', 'parent' => 'a'], ]; $combined = (new Collection($items))->combine('id', 'name'); // Result will look like this when converted to array [ 1 => 'foo', 2 => 'bar', 3 => 'baz', ]; $combined = (new Collection($items))->combine('id', 'name', 'parent'); // Result will look like this when converted to array [ 'a' => [1 => 'foo', 3 => 'baz'], 'b' => [2 => 'bar'] ];
Parameters
-
callable|string
$keyPath the column name path to use for indexing or a function returning the indexing key out of the provided element
-
callable|string
$valuePath the column name path to use as the array value or a function returning the value out of the provided element
-
callable|string|null
$groupPath optional the column name path to use as the parent grouping key or a function returning the key out of the provided element
Returns
self
compile() public
compile(bool $preserveKeys)
Iterates once all elements in this collection and executes all stacked operations of them, finally it returns a new collection with the result.
This is useful for converting non-rewindable internal iterators into a collection that can be rewound and used multiple times.
A common use case is to re-use the same variable for calculating different data. In those cases it may be helpful and more performant to first compile a collection and then apply more operations to it.
Example:
$collection->map($mapper)->sortBy('age')->extract('name'); $compiled = $collection->compile(); $isJohnHere = $compiled->some($johnMatcher); $allButJohn = $compiled->filter($johnMatcher);
In the above example, had the collection not been compiled before, the iterations for map
, sortBy
and extract
would've been executed twice: once for getting $isJohnHere
and once for $allButJohn
You can think of this method as a way to create save points for complex calculations in a collection.
Parameters
-
bool
$preserveKeys optional whether to use the keys returned by this collection as the array keys. Keep in mind that it is valid for iterators to return the same key for different elements, setting this value to false can help getting all items if keys are not important in the result.
Returns
self
contains() public
contains(mixed $value)
Returns true if $value is present in this collection. Comparisons are made both by value and type.
Parameters
-
mixed
$value The value to check for
Returns
bool
true if $value is present in this collection
count() public
count()
Gives the number of rows in the result set.
Part of the Countable interface.
Returns
int
countBy() public
countBy(mixed $callback)
Sorts a list into groups and returns a count for the number of elements in each group. Similar to groupBy, but instead of returning a list of values, returns a count for the number of values in that group.
When $callback is a string it should be a property name to extract or a dot separated path of properties that should be followed to get the last one in the path.
Example:
$items = [ ['id' => 1, 'name' => 'foo', 'parent_id' => 10], ['id' => 2, 'name' => 'bar', 'parent_id' => 11], ['id' => 3, 'name' => 'baz', 'parent_id' => 10], ]; $group = (new Collection($items))->countBy('parent_id'); // Or $group = (new Collection($items))->countBy(function ($e) { return $e['parent_id']; }); // Result will look like this when converted to array [ 10 => 2, 11 => 1 ];
Parameters
-
callable|string
$callback the callback or column name to use for indexing or a function returning the indexing key out of the provided element
Returns
self
countKeys() public
countKeys()
Returns the number of unique keys in this iterator. This is the same as the number of elements the collection will contain after calling toArray()
This method comes with a number of caveats. Please refer to CollectionInterface::count()
for details.
Returns
int
See Also
current() public
current()
Returns the current record in the result iterator
Part of Iterator interface.
Returns
array|object
each() public
each(callable $callback)
Applies a callback to the elements in this collection.
Example:
$collection = (new Collection($items))->each(function ($value, $key) { echo "Element $key: $value"; });
Parameters
-
callable
$callback Callback to run for each element in collection.
Returns
$this
every() public
every(callable $callback)
Returns true if all values in this collection pass the truth test provided in the callback.
Each time the callback is executed it will receive the value of the element in the current iteration and the key of the element as arguments, in that order.
Example:
$overTwentyOne = (new Collection([24, 45, 60, 15]))->every(function ($value, $key) { return $value > 21; });
Empty collections always return true because it is a vacuous truth.
Parameters
-
callable
$callback a callback function
Returns
bool
true if for all elements in this collection the provided callback returns true, false otherwise.
extract() public
extract(mixed $path)
Returns a new collection containing the column or property value found in each of the elements.
The matcher can be a string with a property name to extract or a dot separated path of properties that should be followed to get the last one in the path.
If a column or property could not be found for a particular element in the collection, that position is filled with null.
Example:
Extract the user name for all comments in the array:
$items = [ ['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']], ['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']] ]; $extracted = (new Collection($items))->extract('comment.user.name'); // Result will look like this when converted to array ['Mark', 'Renan']
It is also possible to extract a flattened collection out of nested properties
$items = [ ['comment' => ['votes' => [['value' => 1], ['value' => 2], ['value' => 3]]], ['comment' => ['votes' => [['value' => 4]] ]; $extracted = (new Collection($items))->extract('comment.votes.{*}.value'); // Result will contain [1, 2, 3, 4]
Parameters
-
string|callable
$path A dot separated path of column to follow so that the final one can be returned or a callable that will take care of doing that.
Returns
self
filter() public
filter(?callable $callback)
Looks through each value in the collection, and returns another collection with all the values that pass a truth test. Only the values for which the callback returns true will be present in the resulting collection.
Each time the callback is executed it will receive the value of the element in the current iteration, the key of the element and this collection as arguments, in that order.
Example:
Filtering odd numbers in an array, at the end only the value 2 will be present in the resulting collection:
$collection = (new Collection([1, 2, 3]))->filter(function ($value, $key) { return $value % 2 === 0; });
Parameters
-
callable|null
$callback optional the method that will receive each of the elements and returns true whether or not they should be in the resulting collection. If left null, a callback that filters out falsey values will be used.
Returns
self
first() public
first()
Get the first record from a result set.
This method will also close the underlying statement cursor.
Returns
array|object|null
firstMatch() public
firstMatch(array $conditions)
Returns the first result matching all of the key-value pairs listed in conditions.
Parameters
-
array
$conditions a key-value list of conditions where the key is a property path as accepted by
Collection::extract
, and the value the condition against with each element will be matched
Returns
mixed
See Also
groupBy() public
groupBy(mixed $callback)
Splits a collection into sets, grouped by the result of running each value through the callback. If $callback is a string instead of a callable, groups by the property named by $callback on each of the values.
When $callback is a string it should be a property name to extract or a dot separated path of properties that should be followed to get the last one in the path.
Example:
$items = [ ['id' => 1, 'name' => 'foo', 'parent_id' => 10], ['id' => 2, 'name' => 'bar', 'parent_id' => 11], ['id' => 3, 'name' => 'baz', 'parent_id' => 10], ]; $group = (new Collection($items))->groupBy('parent_id'); // Or $group = (new Collection($items))->groupBy(function ($e) { return $e['parent_id']; }); // Result will look like this when converted to array [ 10 => [ ['id' => 1, 'name' => 'foo', 'parent_id' => 10], ['id' => 3, 'name' => 'baz', 'parent_id' => 10], ], 11 => [ ['id' => 2, 'name' => 'bar', 'parent_id' => 11], ] ];
Parameters
-
callable|string
$callback the callback or column name to use for grouping or a function returning the grouping key out of the provided element
Returns
self
indexBy() public
indexBy(mixed $callback)
Given a list and a callback function that returns a key for each element in the list (or a property name), returns an object with an index of each item.
Just like groupBy, but for when you know your keys are unique.
When $callback is a string it should be a property name to extract or a dot separated path of properties that should be followed to get the last one in the path.
Example:
$items = [ ['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar'], ['id' => 3, 'name' => 'baz'], ]; $indexed = (new Collection($items))->indexBy('id'); // Or $indexed = (new Collection($items))->indexBy(function ($e) { return $e['id']; }); // Result will look like this when converted to array [ 1 => ['id' => 1, 'name' => 'foo'], 3 => ['id' => 3, 'name' => 'baz'], 2 => ['id' => 2, 'name' => 'bar'], ];
Parameters
-
callable|string
$callback the callback or column name to use for indexing or a function returning the indexing key out of the provided element
Returns
self
insert() public
insert(string $path, mixed $values)
Returns a new collection containing each of the elements found in $values
as a property inside the corresponding elements in this collection. The property where the values will be inserted is described by the $path
parameter.
The $path can be a string with a property name or a dot separated path of properties that should be followed to get the last one in the path.
If a column or property could not be found for a particular element in the collection as part of the path, the element will be kept unchanged.
Example:
Insert ages into a collection containing users:
$items = [ ['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']], ['comment' => ['body' => 'awesome', 'user' => ['name' => 'Renan']] ]; $ages = [25, 28]; $inserted = (new Collection($items))->insert('comment.user.age', $ages); // Result will look like this when converted to array [ ['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark', 'age' => 25]], ['comment' => ['body' => 'awesome', 'user' => ['name' => 'Renan', 'age' => 28]] ];
Parameters
-
string
$path a dot separated string symbolizing the path to follow inside the hierarchy of each value so that the value can be inserted
-
mixed
$values The values to be inserted at the specified path, values are matched with the elements in this collection by its positional index.
Returns
self
isEmpty() public
isEmpty()
Returns whether or not there are elements in this collection
Example:
$items [1, 2, 3]; (new Collection($items))->isEmpty(); // false
(new Collection([]))->isEmpty(); // true
Returns
bool
jsonSerialize() public
jsonSerialize()
Returns the data that can be converted to JSON. This returns the same data as toArray()
which contains only unique keys.
Part of JsonSerializable interface.
Returns
array
The data to convert to JSON
key() public
key()
Returns the key of the current record in the iterator
Part of Iterator interface.
Returns
int
last() public
last()
Returns the last result in this collection
Returns
mixed
The last value in the collection will be returned.
lazy() public
lazy()
Returns a new collection where any operations chained after it are guaranteed to be run lazily. That is, elements will be yieleded one at a time.
A lazy collection can only be iterated once. A second attempt results in an error.
Returns
self
listNested() public
listNested(mixed $order, mixed $nestingKey)
Returns a new collection with each of the elements of this collection after flattening the tree structure. The tree structure is defined by nesting elements under a key with a known name. It is possible to specify such name by using the '$nestingKey' parameter.
By default all elements in the tree following a Depth First Search will be returned, that is, elements from the top parent to the leaves for each branch.
It is possible to return all elements from bottom to top using a Breadth First Search approach by passing the '$dir' parameter with 'asc'. That is, it will return all elements for the same tree depth first and from bottom to top.
Finally, you can specify to only get a collection with the leaf nodes in the tree structure. You do so by passing 'leaves' in the first argument.
The possible values for the first argument are aliases for the following constants and it is valid to pass those instead of the alias:
- desc: RecursiveIteratorIterator::SELF_FIRST
- asc: RecursiveIteratorIterator::CHILD_FIRST
- leaves: RecursiveIteratorIterator::LEAVES_ONLY
Example:
$collection = new Collection([ ['id' => 1, 'children' => [['id' => 2, 'children' => [['id' => 3]]]]], ['id' => 4, 'children' => [['id' => 5]]] ]); $flattenedIds = $collection->listNested()->extract('id'); // Yields [1, 2, 3, 4, 5]
Parameters
-
string|int
$order optional The order in which to return the elements
-
string|callable
$nestingKey optional The key name under which children are nested or a callable function that will return the children list
Returns
self
map() public
map(callable $callback)
Returns another collection after modifying each of the values in this one using the provided callable.
Each time the callback is executed it will receive the value of the element in the current iteration, the key of the element and this collection as arguments, in that order.
Example:
Getting a collection of booleans where true indicates if a person is female:
$collection = (new Collection($people))->map(function ($person, $key) { return $person->gender === 'female'; });
Parameters
-
callable
$callback the method that will receive each of the elements and returns the new value for the key that is being iterated
Returns
self
match() public
match(array $conditions)
Looks through each value in the list, returning a Collection of all the values that contain all of the key-value pairs listed in $conditions.
Example:
$items = [ ['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']], ['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']] ]; $extracted = (new Collection($items))->match(['user.name' => 'Renan']); // Result will look like this when converted to array [ ['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']] ]
Parameters
-
array
$conditions a key-value list of conditions where the key is a property path as accepted by `Collection::extract, and the value the condition against with each element will be matched
Returns
self
max() public
max(mixed $callback, int $sort)
Returns the top element in this collection after being sorted by a property.
Check the sortBy method for information on the callback and $sort parameters
Examples:
// For a collection of employees $max = $collection->max('age'); $max = $collection->max('user.salary'); $max = $collection->max(function ($e) { return $e->get('user')->get('salary'); }); // Display employee name echo $max->name;
Parameters
-
callable|string
$callback the callback or column name to use for sorting
-
int
$sort optional The sort type, one of SORT_STRING SORT_NUMERIC or SORT_NATURAL
Returns
mixed
The value of the top element in the collection
See Also
median() public
median(mixed $path)
Returns the median of all the values extracted with $path or of this collection.
Example:
$items = [ ['invoice' => ['total' => 400]], ['invoice' => ['total' => 500]] ['invoice' => ['total' => 100]] ['invoice' => ['total' => 333]] ['invoice' => ['total' => 200]] ]; $total = (new Collection($items))->median('invoice.total'); // Total: 333 $total = (new Collection([1, 2, 3, 4]))->median(); // Total: 2.5
Parameters
-
string|callable|null
$path optional The property name to sum or a function If no value is passed, an identity function will be used. that will return the value of the property to sum.
Returns
float|int|null
min() public
min(mixed $callback, int $sort)
Returns the bottom element in this collection after being sorted by a property.
Check the sortBy method for information on the callback and $sort parameters
Examples:
// For a collection of employees $min = $collection->min('age'); $min = $collection->min('user.salary'); $min = $collection->min(function ($e) { return $e->get('user')->get('salary'); }); // Display employee name echo $min->name;
Parameters
-
callable|string
$callback the callback or column name to use for sorting
-
int
$sort optional The sort type, one of SORT_STRING SORT_NUMERIC or SORT_NATURAL
Returns
mixed
The value of the bottom element in the collection
See Also
nest() public
nest(mixed $idPath, mixed $parentPath, string $nestingKey)
Returns a new collection where the values are nested in a tree-like structure based on an id property path and a parent id property path.
Parameters
-
callable|string
$idPath the column name path to use for determining whether an element is parent of another
-
callable|string
$parentPath the column name path to use for determining whether an element is child of another
-
string
$nestingKey optional The key name under which children are nested
Returns
self
newCollection() protected
newCollection(mixed ...$args)
Returns a new collection.
Allows classes which use this trait to determine their own type of returned collection interface
Parameters
-
mixed
...$args Constructor arguments.
Returns
\Cake\Collection\CollectionInterface
next() public
next()
Advances the iterator pointer to the next record
Part of Iterator interface.
optimizeUnwrap() protected
optimizeUnwrap()
Unwraps this iterator and returns the simplest traversable that can be used for getting the data out
Returns
iterable
prepend() public
prepend(mixed $items)
Prepend a set of items to a collection creating a new collection
Parameters
-
mixed
$items The items to prepend.
Returns
self
prependItem() public
prependItem(mixed $item, mixed $key)
Prepend a single item creating a new collection.
Parameters
-
mixed
$item The item to prepend.
-
mixed
$key optional The key to prepend the item with. If null a key will be generated.
Returns
self
reduce() public
reduce(callable $callback, mixed $initial)
Folds the values in this collection to a single value, as the result of applying the callback function to all elements. $zero is the initial state of the reduction, and each successive step of it should be returned by the callback function.
If $zero is omitted the first value of the collection will be used in its place and reduction will start from the second item.
Parameters
-
callable
$callback The callback function to be called
-
mixed
$initial optional The state of reduction
Returns
mixed
reject() public
reject(callable $callback)
Looks through each value in the collection, and returns another collection with all the values that do not pass a truth test. This is the opposite of filter
.
Each time the callback is executed it will receive the value of the element in the current iteration, the key of the element and this collection as arguments, in that order.
Example:
Filtering even numbers in an array, at the end only values 1 and 3 will be present in the resulting collection:
$collection = (new Collection([1, 2, 3]))->reject(function ($value, $key) { return $value % 2 === 0; });
Parameters
-
callable
$callback the method that will receive each of the elements and returns true whether or not they should be out of the resulting collection.
Returns
self
rewind() public
rewind()
Rewinds a ResultSet.
Part of Iterator interface.
Throws
Cake\Database\Exception
sample() public
sample(int $length)
Returns a new collection with maximum $size random elements from this collection
Parameters
-
int
$length optional the maximum number of elements to randomly take from this collection
Returns
self
serialize() public
serialize()
Serializes a resultset.
Part of Serializable interface.
Returns
string
Serialized object
shuffle() public
shuffle()
Returns a new collection with the elements placed in a random order, this function does not preserve the original keys in the collection.
Returns
self
skip() public
skip(int $length)
Returns a new collection that will skip the specified amount of elements at the beginning of the iteration.
Parameters
-
int
$length The number of elements to skip.
Returns
self
some() public
some(callable $callback)
Returns true if any of the values in this collection pass the truth test provided in the callback.
Each time the callback is executed it will receive the value of the element in the current iteration and the key of the element as arguments, in that order.
Example:
$hasYoungPeople = (new Collection([24, 45, 15]))->every(function ($value, $key) { return $value < 21; });
Parameters
-
callable
$callback a callback function
Returns
bool
true if the provided callback returns true for any element in this collection, false otherwise
sortBy() public
sortBy(mixed $callback, int $order, int $sort)
Returns a sorted iterator out of the elements in this collection, ranked in ascending order by the results of running each value through a callback. $callback can also be a string representing the column or property name.
The callback will receive as its first argument each of the elements in $items, the value returned by the callback will be used as the value for sorting such element. Please note that the callback function could be called more than once per element.
Example:
$items = $collection->sortBy(function ($user) { return $user->age; }); // alternatively $items = $collection->sortBy('age'); // or use a property path $items = $collection->sortBy('department.name'); // output all user name order by their age in descending order foreach ($items as $user) { echo $user->name; }
Parameters
-
callable|string
$callback the callback or column name to use for sorting
-
int
$order optional The sort order, either SORT_DESC or SORT_ASC
-
int
$sort optional The sort type, one of SORT_STRING SORT_NUMERIC or SORT_NATURAL
Returns
self
stopWhen() public
stopWhen(mixed $condition)
Creates a new collection that when iterated will stop yielding results if the provided condition evaluates to true.
This is handy for dealing with infinite iterators or any generator that could start returning invalid elements at a certain point. For example, when reading lines from a file stream you may want to stop the iteration after a certain value is reached.
Example:
Get an array of lines in a CSV file until the timestamp column is less than a date
$lines = (new Collection($fileLines))->stopWhen(function ($value, $key) { return (new DateTime($value))->format('Y') < 2012; }) ->toArray();
Get elements until the first unapproved message is found:
$comments = (new Collection($comments))->stopWhen(['is_approved' => false]);
Parameters
-
callable|array
$condition the method that will receive each of the elements and returns true when the iteration should be stopped. If an array, it will be interpreted as a key-value list of conditions where the key is a property path as accepted by
Collection::extract
, and the value the condition against with each element will be matched.
Returns
self
sumOf() public
sumOf(mixed $path)
Returns the total sum of all the values extracted with $matcher or of this collection.
Example:
$items = [ ['invoice' => ['total' => 100]], ['invoice' => ['total' => 200]] ]; $total = (new Collection($items))->sumOf('invoice.total'); // Total: 300 $total = (new Collection([1, 2, 3]))->sumOf(); // Total: 6
Parameters
-
string|callable|null
$path optional The property name to sum or a function If no value is passed, an identity function will be used. that will return the value of the property to sum.
Returns
float|int
take() public
take(int $length, int $offset)
Returns a new collection with maximum $size elements in the internal order this collection was created. If a second parameter is passed, it will determine from what position to start taking elements.
Parameters
-
int
$length optional the maximum number of elements to take from this collection
-
int
$offset optional A positional offset from where to take the elements
Returns
self
takeLast() public
takeLast(int $length)
Returns the last N elements of a collection
Example:
$items = [1, 2, 3, 4, 5]; $last = (new Collection($items))->takeLast(3); // Result will look like this when converted to array [3, 4, 5];
Parameters
-
int
$length The number of elements at the end of the collection
Returns
self
through() public
through(callable $callback)
Passes this collection through a callable as its first argument.
This is useful for decorating the full collection with another object.
Example:
$items = [1, 2, 3]; $decorated = (new Collection($items))->through(function ($collection) { return new MyCustomCollection($collection); });
Parameters
-
callable
$callback A callable function that will receive this collection as first argument.
Returns
self
toArray() public
toArray(bool $preserveKeys)
Returns an array representation of the results
Parameters
-
bool
$preserveKeys optional whether to use the keys returned by this collection as the array keys. Keep in mind that it is valid for iterators to return the same key for different elements, setting this value to false can help getting all items if keys are not important in the result.
Returns
array
toList() public
toList()
Returns an numerically-indexed array representation of the results.
This is equivalent to calling toArray(false)
Returns
array
transpose() public
transpose()
Transpose rows and columns into columns and rows
Example:
$items = [ ['Products', '2012', '2013', '2014'], ['Product A', '200', '100', '50'], ['Product B', '300', '200', '100'], ['Product C', '400', '300', '200'], ] $transpose = (new Collection($items))->transpose()->toList(); // Returns // [ // ['Products', 'Product A', 'Product B', 'Product C'], // ['2012', '200', '300', '400'], // ['2013', '100', '200', '300'], // ['2014', '50', '100', '200'], // ]
Returns
\Cake\Collection\CollectionInterface
Throws
LogicException
unfold() public
unfold(?callable $callback)
Creates a new collection where the items are the concatenation of the lists of items generated by the transformer function applied to each item in the original collection.
The transformer function will receive the value and the key for each of the items in the collection, in that order, and it must return an array or a Traversable object that can be concatenated to the final result.
If no transformer function is passed, an "identity" function will be used. This is useful when each of the elements in the source collection are lists of items to be appended one after another.
Example:
$items [[1, 2, 3], [4, 5]]; $unfold = (new Collection($items))->unfold(); // Returns [1, 2, 3, 4, 5]
Using a transformer
$items [1, 2, 3]; $allItems = (new Collection($items))->unfold(function ($page) { return $service->fetchPage($page)->toArray(); });
Parameters
-
callable|null
$callback optional A callable function that will receive each of the items in the collection and should return an array or Traversable object
Returns
self
unserialize() public
unserialize(mixed $serialized)
Unserializes a resultset.
Part of Serializable interface.
Parameters
-
string
$serialized Serialized object
unwrap() public
unwrap()
Returns the closest nested iterator that can be safely traversed without losing any possible transformations. This is used mainly to remove empty IteratorIterator wrappers that can only slowdown the iteration process.
Returns
\Traversable
valid() public
valid()
Whether there are more results to be fetched from the iterator
Part of Iterator interface.
Returns
bool
zip() public
zip(iterable $items)
Combines the elements of this collection with each of the elements of the passed iterables, using their positional index as a reference.
Example:
$collection = new Collection([1, 2]); $collection->zip([3, 4], [5, 6])->toList(); // returns [[1, 3, 5], [2, 4, 6]]
Parameters
-
iterable
$items The collections to zip.
Returns
self
zipWith() public
zipWith(iterable $items, mixed $callback)
Combines the elements of this collection with each of the elements of the passed iterables, using their positional index as a reference.
The resulting element will be the return value of the $callable function.
Example:
$collection = new Collection([1, 2]); $zipped = $collection->zipWith([3, 4], [5, 6], function (...$args) { return array_sum($args); }); $zipped->toList(); // returns [9, 12]; [(1 + 3 + 5), (2 + 4 + 6)]
Parameters
-
iterable
$items The collections to zip.
-
callable
$callback The function to use for zipping the elements together.
Returns
self
Property Detail
$_autoFields protected
Tracks value of $_autoFields property of $query passed to constructor.
Type
bool|null
$_containMap protected
List of associations that should be eager loaded.
Type
array
$_count protected
Holds the count of records in this result set
Type
int
$_current protected
Last record fetched from the statement
Type
array|object
$_defaultAlias protected
The default table alias
Type
string
$_defaultTable protected
Default table instance
Type
\Cake\ORM\Table
$_driver protected
The Database driver object.
Cached in a property to avoid multiple calls to the same function.
Type
\Cake\Database\DriverInterface
$_entityClass protected
The fully namespaced name of the class to use for hydrating results
Type
string
$_hydrate protected
Whether to hydrate results into objects or not
Type
bool
$_index protected
Points to the next record number that should be fetched
Type
int
$_map protected
Map of fields that are fetched from the statement with their type and the table they belong to
Type
array
$_matchingMap protected
List of associations that should be placed under the _matchingData
result key.
Type
array
$_matchingMapColumns protected
List of matching associations and the column keys to expect from each of them.
Type
array
$_results protected
Results that have been fetched or hydrated into the results.
Type
array|\SplFixedArray
$_statement protected
Database statement holding the results
Type
\Cake\Database\StatementInterface
$_useBuffering protected
Whether or not to buffer results fetched from the statement
Type
bool
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.1/class-Cake.ORM.ResultSet.html