Spec-Zone.ru › CakePHP 4.3

Класс ResultSet

Представляет результаты, полученные после выполнения запроса для определённой таблицы. Этот объект отвечает за правильное вложение ключей результатов, полученных из запроса, приведение каждого поля к соответствующему типу и выполнение дополнительных запросов, необходимых для ленивой загрузки внешних ассоциаций.

Пространство имён: Cake\ORM

Краткое описание свойств

  • $_autoFields protected
    bool|null

    Отслеживает значение свойства $_autoFields объекта $query, переданного в конструктор.

  • $_containMap protected
    array

    Список ассоциаций, которые должны быть загружены ленивой загрузкой.

  • $_count protected
    int

    Содержит количество записей в этом наборе результатов.

  • $_current protected
    object|array

    Последняя извлеченная запись из оператора.

  • $_defaultAlias protected
    string

    Базовое псевдоним таблицы.

  • $_defaultTable protected
    Cake\ORM\Table

    Базовый экземпляр таблицы.

  • $_driver protected
    Cake\Database\DriverInterface

    Объект драйвера базы данных.

  • $_entityClass protected
    string

    Полное имя пространства имён класса, используемого для гидратации результатов.

  • $_hydrate protected
    bool

    Определяет, нужно ли гидратировать результаты в объекты.

  • $_index protected
    int

    Указатель на номер следующей записи, которая должна быть извлечена.

  • $_map protected
    array

    Карта полей, извлечённых из оператора с их типом и таблицей, к которой они относятся.

  • $_matchingMap protected
    array

    Список ассоциаций, которые должны быть размещены под ключом результата _matchingData.

  • $_matchingMapColumns protected
    array

    Список сопоставляемых ассоциаций и ключей столбцов, ожидаемых от каждой из них.

  • $_results protected
    SplFixedArray|array

    Результаты, которые были извлечены или гидратированы в результаты.

  • $_statement protected
    Cake\Database\StatementInterface

    Оператор базы данных, содержащий результаты.

  • $_useBuffering protected
    bool

    Определяет, нужно ли буферизовать извлеченные результаты из оператора.

Краткое описание методов

  • __construct() public

    Конструктор

  • __debugInfo() public

    Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.

  • __serialize() public

    Сериализует результат.

  • __unserialize() public

    Десериализует результат.

  • _calculateAssociationMap() protected

    Вычисляет список ассоциаций, которые должны быть загружены при получении каждого запися

  • _calculateColumnMap() protected

    Создаёт карту ключей строк из запроса select, которая может быть использована для более быстрого гидратирования вложенных наборов результатов.

  • _createMatcherFilter() protected

    Возвращает вызываемый объект, который получает значение и возвращает, соответствует ли оно определённому условию.

  • _extract() protected

    Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащихся в $path. Возвращает массивы для элементов, представленных {*}

  • _fetchResult() protected

    Вспомогательная функция для извлечения следующего результата из оператора или данных результата.

  • _groupResult() protected

    Правильно вкладывает ключи результатов, включая те, которые поступают от ассоциаций.

  • _propertyExtractor() protected

    Возвращает вызываемый объект, который может быть использован для извлечения свойства или столбца из массива или объекта на основе пути с разделителем точек.

  • _simpleExtract() protected

    Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащихся в $path.

  • append() public

    Возвращает новый набор результатов в результате конкатенации списка элементов в этом наборе с переданным списком элементов.

  • appendItem() public

    Добавляет один элемент, создавая новый набор.

  • avg() public

    Возвращает среднее значение всех значений, извлечённых с помощью $path или этого набора.

  • buffered() public

    Возвращает новый набор, где операции, выполняемые этим набором, выполняются только один раз, независимо от того, сколько раз новый набор итерируется.

  • cartesianProduct() public

    Создаёт новый набор, который является декартовым произведением текущего набора.

  • chunk() public

    Разбивает набор на меньшие массивы заданного размера.

  • chunkWithKeys() public

    Разбивает набор на меньшие массивы заданного размера.

  • combine() public

    Возвращает новый набор, где значения извлекаются на основе пути к значению, а затем индексируются по пути к ключу. Этот метод может также генерировать родительские группы на основе пути к свойству группы.

  • compile() public

    Итерирует все элементы в этом наборе и выполняет все наложенные операции над ними, а затем возвращает новый набор с результатом. Это полезно для преобразования необратимых внутренних итераторов в набор, который можно обработать повторно и использовать несколько раз.

  • contains() public

    Возвращает true, если $value присутствует в этом наборе. Сравнения производятся по значению и типу.

  • count() public

    Даёт количество строк в наборе результатов.

  • countBy() public

    Сортирует список по группам и возвращает счётчик количества элементов в каждой группе. Аналогично groupBy, но вместо возвращения списка значений возвращает счётчик значений в этой группе.

  • countKeys() public

    Возвращает количество уникальных ключей в этом итераторе. Это равно количеству элементов, которые будет содержать набор после вызова toArray()

  • current() public

    Возвращает текущую запись в итераторе результата.

  • each() public

    Применяет обратный вызов к элементам в этом наборе.

  • every() public

    Возвращает true, если все значения в этом наборе проходят проверку истинности, заданную в обратном вызове.

  • extract() public

    Возвращает новый набор, содержащий значение столбца или свойства, найденного в каждом из элементов.

  • filter() public

    Просматривает каждое значение в наборе и возвращает другой набор со всеми значениями, которые проходят проверку истинности. В результирующем наборе будут присутствовать только те значения, для которых обратный вызов возвращает true.

  • first() public

    Получает первую запись из набора результатов.

  • firstMatch() public

    Возвращает первый результат, соответствующий всем парам ключ-значение, перечисленным в условиях.

  • groupBy() public

    Разбивает набор на группы, сгруппированные по результату выполнения каждого значения через обратный вызов. Если $callback — строка вместо вызываемого объекта, группирует по свойству, названному $callback, для каждого из значений.

  • indexBy() public

    Для заданного списка и функции обратного вызова, возвращающей ключ для каждого элемента в списке (или имени свойства), возвращает объект с индексом каждого элемента. Подобно groupBy, но для случаев, когда ключи уникальны.

  • insert() public

    Возвращает новый набор, содержащий каждый элемент, найденный в $values, как свойство внутри соответствующих элементов в этом наборе. Свойство, куда будут вставлены значения, описывается параметром $path

  • isEmpty() public

    Возвращает, есть ли элементы в этом наборе.

  • jsonSerialize() public

    Возвращает данные, которые можно преобразовать в JSON. Это возвращает те же данные, что и toArray(), содержащие только уникальные ключи.

  • key() public

    Возвращает ключ текущей записи в итераторе.

  • last() public

    Возвращает последний результат в этом наборе.

  • lazy() public

    Возвращает новый набор, где любые операции, присоединённые к нему, гарантированно будут выполняться лениво. То есть элементы будут выводиться по одному.

  • listNested() public

    Возвращает новую коллекцию с каждым элементом этой коллекции после разворачивания древовидной структуры. Структура дерева определяется вложенностью элементов под ключом с известным именем. Можно указать такое имя, используя параметр '$nestingKey'.

  • map() public

    Возвращает другую коллекцию после изменения каждого значения в этой коллекции с помощью предоставленной вызываемой функции.

  • match() public

    Просматривает каждое значение в списке, возвращая коллекцию всех значений, которые содержат все пары ключ-значение, перечисленные в $conditions.

  • max() public

    Возвращает верхний элемент в этой коллекции после сортировки по свойству. Проверьте метод sortBy для получения информации о функции обратного вызова и параметрах $sort.

  • median() public

    Возвращает медиану всех значений, извлеченных с помощью $path, или этой коллекции.

  • min() public

    Возвращает нижний элемент в этой коллекции после сортировки по свойству. Проверьте метод sortBy для получения информации о функции обратного вызова и параметрах $sort.

  • nest() public

    Возвращает новую коллекцию, где значения вложены в древовидную структуру на основе пути к свойству id и пути к свойству родительского id.

  • newCollection() protected

    Возвращает новую коллекцию.

  • next() public

    Перемещает указатель итератора к следующей записи.

  • optimizeUnwrap() protected

    Развертывает эту итерацию и возвращает самую простую итерируемую структуру, которую можно использовать для извлечения данных.

  • prepend() public

    Добавляет набор элементов в начало коллекции, создавая новую коллекцию.

  • prependItem() public

    Добавляет один элемент в начало, создавая новую коллекцию.

  • reduce() public

    Сворачивает значения в этой коллекции в одно значение, как результат применения функции обратного вызова ко всем элементам. $zero — начальное состояние сокращения, а каждый последующий шаг должен возвращаться функцией обратного вызова. Если $zero опущена, то будет использоваться первое значение коллекции, и сокращение начнется со второго элемента.

  • reject() public

    Просматривает каждое значение в коллекции и возвращает другую коллекцию со всеми значениями, которые не проходят проверку истинности. Это противоположно filter.

  • rewind() public

    Перематывает ResultSet.

  • sample() public

    Возвращает новую коллекцию с максимальным количеством $size случайных элементов из этой коллекции.

  • serialize() public

    Сериализует результат.

  • shuffle() public

    Возвращает новую коллекцию с элементами в случайном порядке. Эта функция не сохраняет исходные ключи в коллекции.

  • skip() public

    Возвращает новую коллекцию, которая будет пропускать указанное количество элементов в начале итерации.

  • some() public

    Возвращает true, если любое из значений в этой коллекции проходит проверку истинности, предоставленную в функции обратного вызова.

  • sortBy() public

    Возвращает отсортированную итерацию элементов этой коллекции, упорядоченную по возрастанию результатов применения функции обратного вызова к каждому значению. $callback также может быть строкой, представляющей имя столбца или свойства.

  • stopWhen() public

    Создает новую коллекцию, которая при итерации прекратит выдачу результатов, если предоставленное условие истинно.

  • sumOf() public

    Возвращает общую сумму всех значений, извлеченных с помощью $matcher, или этой коллекции.

  • take() public

    Возвращает новую коллекцию с максимальным количеством $size элементов в порядке, в котором эта коллекция была создана. Если передать второй параметр, он определит, с какой позиции начинать извлечение элементов.

  • takeLast() public

    Возвращает последние N элементов коллекции.

  • through() public

    Передает эту коллекцию как первый аргумент вызываемой функции. Это полезно для декорирования всей коллекции другим объектом.

  • toArray() public

    Возвращает массивное представление результатов.

  • toList() public

    Возвращает массивное представление результатов с числовыми индексами. Это эквивалентно вызову toArray(false).

  • transpose() public

    Транспонирует строки и столбцы в столбцы и строки.

  • unfold() public

    Создает новую коллекцию, где элементы являются конкатенацией списков элементов, сгенерированных функцией преобразования, применяемой к каждому элементу исходной коллекции.

  • unserialize() public

    Десериализует результат.

  • unwrap() public

    Возвращает самую близкую вложенную итерацию, которую можно безопасно пройти, не теряя возможных преобразований. Это используется в основном для удаления пустых обёртков IteratorIterator, которые могут только замедлить процесс итерации.

  • valid() public

    Есть ли еще результаты для извлечения из итератора?

  • zip() public

    Объединяет элементы этой коллекции с каждым из элементов переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.

  • zipWith() public

    Объединяет элементы этой коллекции с каждым из элементов переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.

Подробное описание методов

__construct() public

__construct(Cake\ORM\Query $query, Cake\Database\StatementInterface $statement)

Конструктор

Параметры

Cake\ORM\Query $query

Запрос, откуда берутся результаты

Cake\Database\StatementInterface $statement

Запрос для извлечения данных

__debugInfo() public

__debugInfo(): array

Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.

Возвращает

array

__serialize() public

__serialize(): array

Сериализует результат набора.

Возвращает

array

__unserialize() public

__unserialize(array $data): void

Десериализует результат набора.

Параметры

array $data

Массив данных.

Возвращает

void

_calculateAssociationMap() protected

_calculateAssociationMap(Cake\ORM\Query $query): void

Вычисляет список ассоциаций, которые должны быть загружены при извлечении каждой записи

Параметры

Cake\ORM\Query $query

Запрос, из которого нужно получить ассоциации

Возвращает

void

_calculateColumnMap() protected

_calculateColumnMap(Cake\ORM\Query $query): void

Создаёт карту ключей строк из предложения SELECT запроса, которая может быть использована для более быстрого гидратирования вложенных наборов результатов.

Параметры

Cake\ORM\Query $query

Запрос, из которого нужно получить карту столбцов

Возвращает

void

_createMatcherFilter() protected

_createMatcherFilter(array $conditions): Closure

Возвращает вызываемый объект, который принимает значение и возвращает, соответствует ли оно определённому условию.

Параметры

array $conditions

Список условий для сопоставления, где ключ — путь к свойству для извлечения из текущего элемента, а значение — значение для сравнения с элементом.

Возвращает

Closure

_extract() protected

_extract(ArrayAccess|array $data, array<string> $parts): mixed

Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащиеся в $path. Возвращает массивы для элементов, представленных {*}

Параметры

ArrayAccess|array $data

Данные.

array<string> $parts

Путь для извлечения.

Возвращает

mixed

_fetchResult() protected

_fetchResult(): mixed

Вспомогательная функция для извлечения следующего результата из запроса или данных.

Возвращает

mixed

_groupResult() protected

_groupResult(array $row): Cake\Datasource\EntityInterface|array

Правильно вкладывает ключи результатов, включая те, которые получены из ассоциаций.

Параметры

array $row

Массив, содержащий столбцы и значения, или false, если результатов нет.

Возвращает

Cake\Datasource\EntityInterface|array

_propertyExtractor() protected

_propertyExtractor(callable|string $path): callable

Возвращает вызываемый объект, который может использоваться для извлечения свойства или столбца из массива или объекта на основе пути, разделённого точкой.

Параметры

callable|string $path

Путь к столбцу, разделённый точкой, для получения конечного результата, или вызываемый объект, который позаботится об этом.

Возвращает

callable

_simpleExtract() protected

_simpleExtract(ArrayAccess|array $data, array<string> $parts): mixed

Возвращает столбец из $data, который можно извлечь, перебирая имена столбцов, содержащиеся в $path.

Параметры

ArrayAccess|array $data

Данные.

array<string> $parts

Путь для извлечения.

Возвращает

mixed

append() public

append(iterable $items): self

Возвращает новую коллекцию в результате конкатенации списка элементов в этой коллекции со списком переданных элементов.

Параметры

iterable $items

Возвращает

self

appendItem() public

appendItem(mixed $item, mixed $key = null): self

Добавляет один элемент, создавая новую коллекцию.

Параметры

mixed $item
mixed $key optional

Возвращает

self

avg() public

avg(callable|string|null $path = null): float|int|null

Возвращает среднее значение всех значений, извлечённых с помощью $path, или всей коллекции.

Пример:

$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

Среднее пустого набора или 0 строк — null. Коллекции с null значениями не считаются пустыми.

Параметры

callable|string|null $path optional

Возвращает

float|int|null

buffered() public

buffered(): self

Возвращает новую коллекцию, где операции, выполненные этой коллекцией, выполняются только один раз. Независимо от того, сколько раз новая коллекция будет перебираться.

Это также можно использовать для того, чтобы сделать любой неперематываемый итератор перематываемым.

Возвращает

self

cartesianProduct() public

cartesianProduct(callable|null $operation = null, callable|null $filter = null): Cake\Collection\CollectionInterface

Создаёт новую коллекцию, которая является декартовым произведением текущей коллекции.

Для создания декартова произведения коллекция должна содержать одномерные данные.

Пример

$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],
];

Параметры

callable|null $operation optional

Вызываемый объект, позволяющий настроить результат произведения.

callable|null $filter optional

Фильтрующая функция обратного вызова, которая должна возвращать true, чтобы результат был частью конечных результатов.

Возвращает

Cake\Collection\CollectionInterface

Исключения

LogicException

chunk() public

chunk(int $chunkSize): self

Разбивает коллекцию на меньшие массивы заданного размера.

Пример:

$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]]

Параметры

int $chunkSize

Возвращает

self

chunkWithKeys() public

chunkWithKeys(int $chunkSize, bool $keepKeys = true): self

Разбивает коллекцию на меньшие массивы заданного размера.

Пример:

$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]]

Параметры

int $chunkSize
bool $keepKeys optional

Возвращает

self

combine() public

combine(callable|string $keyPath, callable|string $valuePath, callable|string|null $groupPath = null): self

Возвращает новую коллекцию, где значения извлекаются по пути к значению, а затем индексируются по пути к ключу. Дополнительно этот метод может генерировать родительские группы по пути к свойству группы.

Примеры:

$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']
];

Параметры

callable|string $keyPath
callable|string $valuePath
callable|string|null $groupPath optional

Возвращает

self

compile() public

compile(bool $keepKeys = true): self

Проходит по всем элементам этого набора один раз и выполняет все накопленные операции над ними, в итоге возвращает новый набор с результатом. Это полезно для преобразования необратимых внутренних итераторов в набор, который можно перемотать и использовать несколько раз.

Распространённый случай использования — повторное использование одной и той же переменной для вычисления различных данных. В таких случаях может быть полезно и более эффективно сначала скомпилировать набор, а затем применить к нему дополнительные операции.

Пример:

$collection->map($mapper)->sortBy('age')->extract('name');
$compiled = $collection->compile();
$isJohnHere = $compiled->some($johnMatcher);
$allButJohn = $compiled->filter($johnMatcher);

В приведённом выше примере, если бы набор не был скомпилирован предварительно, итерации для map, sortBy и extract были бы выполнены дважды: один раз для получения $isJohnHere и один раз для $allButJohn

Можно рассматривать этот метод как способ создания точек сохранения для сложных вычислений в наборе.

Параметры

bool $keepKeys необязательно

Возвращает

self

contains() public

contains(mixed $value): bool

Возвращает true, если $value присутствует в этом наборе. Сравнения производятся по значению и типу.

Параметры

mixed $value

Возвращает

bool

count() public

count(): int

Возвращает количество строк в наборе результатов.

Часть интерфейса Countable.

Возвращает

int

countBy() public

countBy(callable|string $path): self

Группирует элементы списка и возвращает счёт элементов в каждой группе. Аналогично groupBy, но вместо возвращения списка значений, возвращает счёт значений в группе.

Если $callback является строкой, он должен представлять имя свойства для извлечения или путь через свойства, разделённые точкой, для получения последнего свойства в пути.

Пример:

$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
];

Параметры

callable|string $path

Возвращает

self

countKeys() public

countKeys(): int

Возвращает количество уникальных ключей в этом итераторе. Это то же самое, что и количество элементов, которое будет содержать набор после вызова toArray().

Этот метод имеет ряд ограничений. Подробнее см. CollectionInterface::count().

Возвращает

int

current() public

current(): object|array

Возвращает текущую запись в итераторе результатов.

Часть интерфейса Iterator.

Возвращает

object|array

each() public

each(callable $callback): $this

Применяет обратный вызов к элементам в этом наборе.

Пример:

$collection = (new Collection($items))->each(function ($value, $key) {
 echo "Element $key: $value";
});

Параметры

callable $callback

Возвращает

$this

every() public

every(callable $callback): bool

Возвращает true, если все значения в этом наборе проходят проверку, заданную в обратном вызове.

Обратный вызов получает значение и ключ элемента, проверяемого на соответствие, и должен возвращать true, если проверка пройдена.

Пример:

$overTwentyOne = (new Collection([24, 45, 60, 15]))->every(function ($value, $key) {
 return $value > 21;
});

Пустые наборы всегда возвращают true.

Параметры

callable $callback

Возвращает

bool

extract() public

extract(callable|string $path): self

Возвращает новый набор, содержащий значения столбцов или свойств, найденных в каждом элементе.

Matcher может быть строкой с именем свойства для извлечения или путём через свойства, разделёнными точкой, для получения последнего свойства в пути.

Если столбец или свойство не могут быть найдены для конкретного элемента в наборе, в эту позицию вставляется null.

Пример:

Извлечь имя пользователя для всех комментариев в массиве:

$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']

Также можно извлечь плоский набор из вложенных свойств

$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]

Параметры

callable|string $path

Возвращает

self

filter() public

filter(callable|null $callback = null): self

Просматривает каждое значение в наборе и возвращает новый набор со всеми значениями, которые проходят проверку. В результирующем наборе будут только те значения, для которых обратный вызов возвращает true.

Каждый раз, когда выполняется обратный вызов, он получает значение элемента в текущей итерации, ключ элемента и этот набор в качестве аргументов в указанном порядке.

Пример:

Фильтрация нечётных чисел в массиве, в итоге в результирующем наборе будет только значение 2:

$collection = (new Collection([1, 2, 3]))->filter(function ($value, $key) {
 return $value % 2 === 0;
});

Параметры

callable|null $callback необязательно

Возвращает

self

first() public

first(): object|array|null

Получить первую запись из набора результатов.

Этот метод также закроет курсор подлежащего утверждения.

Возвращает

object|array|null

firstMatch() public

firstMatch(array $conditions): mixed

Возвращает первый результат, соответствующий всем парам ключ-значение, указанным в условиях.

Параметры

array $conditions

Возвращает

mixed

groupBy() public

groupBy(callable|string $path): self

Разделяет набор на группы, сгруппированные по результату применения обратного вызова к каждому значению. Если $callback — это строка, а не вызываемый объект, то группировка происходит по свойству, указанному в $callback, для каждого значения.

Если $callback является строкой, он должен представлять имя свойства для извлечения или путь через свойства, разделённые точкой, для получения последнего свойства в пути.

Пример:

$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],
 ]
];

Параметры

callable|string $path

Возвращает

self

indexBy() public

indexBy(callable|string $path): self

Учитывая список и функцию обратного вызова, возвращающую ключ для каждого элемента в списке (или имя свойства), возвращает объект с индексом каждого элемента. То же, что и groupBy, но для случаев, когда ключи уникальны.

Если $callback является строкой, он должен представлять имя свойства для извлечения или путь через свойства, разделённые точкой, для получения последнего свойства в пути.

Пример:

$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'],
];

Параметры

callable|string $path

Возвращает

self

insert() public

insert(string $path, mixed $values): self

Возвращает новый набор, содержащий каждый элемент, найденный в $values, в качестве свойства в соответствующих элементах этого набора. Свойство, в которое будут вставлены значения, описывается параметром $path.

Параметр $path может быть строкой с именем свойства или путём через свойства, разделёнными точкой, для получения последнего свойства в пути.

Если столбец или свойство по указанному пути не могут быть найдены для конкретного элемента в наборе, элемент остаётся без изменений.

Пример:

Вставка возрастов в набор, содержащий пользователей:

$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]]
];

Параметры

string $path
mixed $values

Возвращает

self

isEmpty() public

isEmpty(): bool

Возвращает true, если в этом наборе нет элементов.

Пример:

$items [1, 2, 3];
(new Collection($items))->isEmpty(); // false
(new Collection([]))->isEmpty(); // true

Возвращает

bool

jsonSerialize() public

jsonSerialize(): array

Возвращает данные, которые могут быть преобразованы в JSON. Это возвращает те же данные, что и toArray(), содержащие только уникальные ключи.

Часть интерфейса JsonSerializable.

Возвращает

array

key() public

key(): int

Возвращает ключ текущей записи в итераторе

Часть интерфейса Iterator.

Возвращает

int

last() public

last(): mixed

Возвращает последний результат в этом наборе

Возвращает

mixed

lazy() public

lazy(): self

Возвращает новый набор, где все операции, присоединённые после него, гарантированно будут выполняться лениво. То есть, элементы будут возвращаться по одному.

Ленивый набор может быть итерирован только один раз. Вторая попытка приводит к ошибке.

Возвращает

self

listNested() public

listNested(string|int $order = 'desc', callable|string $nestingKey = 'children'): self

Возвращает новый набор с каждым элементом этого набора после выравнивания древовидной структуры. Древовидная структура определяется вложением элементов под ключом с известным именем. Такое имя можно указать, используя параметр '$nestingKey'.

По умолчанию возвращаются все элементы в дереве, следуя поиску в глубину (Depth First Search), то есть элементы от родительского элемента к листьям каждого ветвления.

Возвратить все элементы сверху вниз можно с помощью поиска в ширину (Breadth First Search), передав параметр '$dir' со значением 'asc'. То есть, это вернёт все элементы для той же глубины дерева, но сверху вниз.

Наконец, можно указать, чтобы получить только набор с узлами-листьями в древовидной структуре. Для этого передайте 'leaves' в первом аргументе.

Возможные значения для первого аргумента являются псевдонимами для следующих констант, и вместо псевдонима можно использовать сами константы:

  • desc: RecursiveIteratorIterator::SELF_FIRST
  • asc: RecursiveIteratorIterator::CHILD_FIRST
  • leaves: RecursiveIteratorIterator::LEAVES_ONLY

Пример:

$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]

Параметры

string|int $order необязательно
callable|string $nestingKey необязательно

Возвращает

self

map() public

map(callable $callback): self

Возвращает другой набор после модификации каждого из значений в этом наборе с помощью предоставленной вызываемой функции.

Каждый раз при выполнении обратного вызова он получит значение элемента в текущей итерации, ключ элемента и этот набор в качестве аргументов в указанном порядке.

Пример:

Получение набора булевых значений, где true указывает на то, что человек женщина:

$collection = (new Collection($people))->map(function ($person, $key) {
 return $person->gender === 'female';
});

Параметры

callable $callback

Возвращает

self

match() public

match(array $conditions): self

Просматривает каждое значение в списке, возвращая набор всех значений, содержащих все пары ключ-значение, перечисленные в $conditions.

Пример:

$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']]
]

Параметры

array $conditions

Возвращает

self

max() public

max(callable|string $path, int $sort = \SORT_NUMERIC): mixed

Возвращает верхний элемент в этом наборе после сортировки по свойству. См. метод sortBy для получения информации о обратном вызове и параметре $sort.

Примеры:

// 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;

Параметры

callable|string $path
int $sort необязательно

Возвращает

mixed

median() public

median(callable|string|null $path = null): float|int|null

Возвращает медиану всех значений, извлечённых с помощью $path или из этого набора.

Пример:

$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

Медиана пустого набора или 0 строк равна null. Наборы с null значениями не считаются пустыми.

Параметры

callable|string|null $path необязательно

Возвращает

float|int|null

min() public

min(callable|string $path, int $sort = \SORT_NUMERIC): mixed

Возвращает нижний элемент в этом наборе после сортировки по свойству. См. метод sortBy для получения информации о обратном вызове и параметре $sort.

Примеры:

// 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;

Параметры

callable|string $path
int $sort необязательно

Возвращает

mixed

nest() public

nest(callable|string $idPath, callable|string $parentPath, string $nestingKey = 'children'): self

Возвращает новый набор, где значения вложены в древовидную структуру на основе пути к свойству id и пути к свойству родительского id.

Параметры

callable|string $idPath
callable|string $parentPath
string $nestingKey необязательно

Возвращает

self

newCollection() protected

newCollection(mixed ...$args): Cake\Collection\CollectionInterface

Возвращает новый набор.

Позволяет классам, использующим этот трейт, определять собственный тип возвращаемого интерфейса набора.

Параметры

mixed ...$args

Аргументы конструктора.

Возвращает

Cake\Collection\CollectionInterface

next() public

next(): void

Перемещает указатель итератора к следующей записи

Часть интерфейса Iterator.

Возвращает

void

optimizeUnwrap() protected

optimizeUnwrap(): iterable

Распаковывает этот итератор и возвращает самый простой обход, который может быть использован для получения данных

Возвращает

iterable

prepend() public

prepend(mixed $items): self

Добавляет набор элементов в начало набора, создавая новый набор

Параметры

mixed $items

Возвращает

self

prependItem() public

prependItem(mixed $item, mixed $key = null): self

Добавляет один элемент в начало, создавая новый набор.

Параметры

mixed $item
mixed $key необязательно

Возвращает

self

reduce() public

reduce(callable $callback, mixed $initial = null): mixed

Сворачивает значения в этом наборе в одно значение, как результат применения функции обратного вызова ко всем элементам. $zero - начальное состояние свертки, и каждый последующий шаг должен возвращаться функцией обратного вызова. Если $zero опущен, первое значение набора будет использоваться вместо него, и свертка начнется со второго элемента.

Параметры

callable $callback
mixed $initial необязательно

Возвращает

mixed

reject() public

reject(callable $callback): self

Просматривает каждое значение в наборе и возвращает другой набор со всеми значениями, которые не проходят проверку истинности. Это противоположно filter.

При каждом выполнении обратного вызова он получит значение элемента в текущей итерации, ключ элемента и этот набор в качестве аргументов в указанном порядке.

Пример:

Фильтрация чётных чисел в массиве, в результате в конечном наборе будут только значения 1 и 3:

$collection = (new Collection([1, 2, 3]))->reject(function ($value, $key) {
 return $value % 2 === 0;
});

Параметры

callable $callback

Возвращает

self

rewind() public

rewind(): void

Перематывает результат.

Часть интерфейса Iterator.

Возвращает

void

Исключения

Cake\Database\Exception\DatabaseException

sample() public

sample(int $length = 10): self

Возвращает новую коллекцию с максимальным количеством $size случайных элементов из этой коллекции

Параметры

int $length необязательный

Возвращает

self

serialize() public

serialize(): string

Сериализует результат набора данных.

Часть интерфейса Serializable.

Возвращает

string

shuffle() public

shuffle(): self

Возвращает новую коллекцию с элементами в случайном порядке. Эта функция не сохраняет исходные ключи в коллекции.

Возвращает

self

skip() public

skip(int $length): self

Возвращает новую коллекцию, которая будет пропускать указанное количество элементов в начале итерации.

Параметры

int $length

Возвращает

self

some() public

some(callable $callback): bool

Возвращает true, если хотя бы одно из значений в этой коллекции проходит проверку, заданную в обратном вызове.

Обратный вызов получает значение и ключ проверяемого элемента и должен вернуть true, если проверка пройдена.

Пример:

$hasYoungPeople = (new Collection([24, 45, 15]))->some(function ($value, $key) {
 return $value < 21;
});

Параметры

callable $callback

Возвращает

bool

sortBy() public

sortBy(callable|string $path, int $order = \SORT_DESC, int $sort = \SORT_NUMERIC): self

Возвращает отсортированный итератор элементов в этой коллекции, ранжированных в порядке возрастания по результатам выполнения каждого значения через обратный вызов. $callback также может быть строкой, представляющей имя столбца или свойства.

Обратный вызов получит в качестве первого аргумента каждый элемент в $items, возвращенное значение обратного вызова будет использовано в качестве значения для сортировки элемента. Обратите внимание, что функция обратного вызова может быть вызвана более одного раза для каждого элемента.

Пример:

$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;
}

Параметры

callable|string $path
int $order необязательный
int $sort необязательный

Возвращает

self

stopWhen() public

stopWhen(callable|array $condition): self

Создает новую коллекцию, которая при итерации прекратит выдачу результатов, если предоставленное условие принимает значение true.

Это удобно для работы с бесконечными итераторами или любым генератором, который может начать возвращать недопустимые элементы в определенный момент. Например, при чтении строк из потока файла вы можете остановить итерацию после достижения определенного значения.

Пример:

Получение массива строк в файле CSV до тех пор, пока столбец с отметкой времени не станет меньше определенной даты

$lines = (new Collection($fileLines))->stopWhen(function ($value, $key) {
 return (new DateTime($value))->format('Y') < 2012;
})
->toArray();

Получение элементов до тех пор, пока не будет найден первый элемент без утверждения:

$comments = (new Collection($comments))->stopWhen(['is_approved' => false]);

Параметры

callable|array $condition

Возвращает

self

sumOf() public

sumOf(callable|string|null $path = null): float|int

Возвращает общую сумму всех значений, извлеченных с помощью $matcher, или этой коллекции.

Пример:

$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

Параметры

callable|string|null $path необязательный

Возвращает

float|int

take() public

take(int $length = 1, int $offset = 0): self

Возвращает новую коллекцию с максимальным количеством $size элементов в порядке, в котором эта коллекция была создана. Если указан второй параметр, он определит, с какой позиции начинать извлечение элементов.

Параметры

int $length необязательный
int $offset необязательный

Возвращает

self

takeLast() public

takeLast(int $length): self

Возвращает последние N элементов коллекции

Пример:

$items = [1, 2, 3, 4, 5];

$last = (new Collection($items))->takeLast(3);

// Result will look like this when converted to array
[3, 4, 5];

Параметры

int $length

Возвращает

self

through() public

through(callable $callback): self

Пропускает эту коллекцию через вызываемый объект в качестве первого аргумента. Это полезно для декорирования всей коллекции другим объектом.

Пример:

$items = [1, 2, 3];
$decorated = (new Collection($items))->through(function ($collection) {
     return new MyCustomCollection($collection);
});

Параметры

callable $callback

Возвращает

self

toArray() public

toArray(bool $keepKeys = true): array

Возвращает массив, представляющий результаты

Параметры

bool $keepKeys необязательный

Возвращает

array

toList() public

toList(): array

Возвращает массив с числовыми индексами, представляющий результаты. Это эквивалентно вызову toArray(false)

Возвращает

array

transpose() public

transpose(): Cake\Collection\CollectionInterface

Транспонировать строки и столбцы в столбцы и строки

Пример:

$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'],
// ]

Возвращает

Cake\Collection\CollectionInterface

Исключения

LogicException

unfold() public

unfold(callable|null $callback = null): self

Создает новую коллекцию, где элементы являются конкатенацией списков элементов, сгенерированных функцией трансформатора, примененной к каждому элементу в исходной коллекции.

Функция трансформатора получит значение и ключ для каждого элемента в коллекции в указанном порядке, и она должна вернуть массив или объект Traversable, который можно конкатенировать с конечным результатом.

Если функция трансформатора не передана, будет использоваться функция «тождества». Это полезно, когда каждый элемент в исходной коллекции представляет собой список элементов, которые нужно добавить один за другим.

Пример:

$items [[1, 2, 3], [4, 5]];
$unfold = (new Collection($items))->unfold(); // Returns [1, 2, 3, 4, 5]

Использование трансформатора

$items [1, 2, 3];
$allItems = (new Collection($items))->unfold(function ($page) {
 return $service->fetchPage($page)->toArray();
});

Параметры

callable|null $callback необязательный

Возвращает

self

unserialize() public

unserialize(string $serialized): void

Десериализует результат набора данных.

Часть интерфейса Serializable.

Параметры

string $serialized

Сериализованный объект

Возвращает

void

unwrap() public

unwrap(): Traversable

Возвращает ближайший вложенный итератор, который можно безопасно проходить, не теряя возможных преобразований. Это используется в основном для удаления пустых обёрток IteratorIterator, которые могут только замедлить процесс итерации.

Возвращает

Traversable

valid() public

valid(): bool

Существуют ли еще результаты, ожидающие извлечения из итератора

Часть интерфейса Iterator.

Возвращает

bool

zip() public

zip(iterable $items): self

Объединяет элементы этой коллекции с каждым из элементов переданных итерабельных объектов, используя их позиционный индекс в качестве ссылки.

Пример:

$collection = new Collection([1, 2]);
$collection->zip([3, 4], [5, 6])->toList(); // returns [[1, 3, 5], [2, 4, 6]]

Параметры

iterable $items

Возвращает

self

zipWith() public

zipWith(iterable $items, callable $callback): self

Объединяет элементы этого набора с каждым из элементов переданных итерируемых объектов, используя их позиционный индекс в качестве ссылки.

Результирующий элемент будет результатом выполнения функции $callable.

Пример:

$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)]

Параметры

iterable $items
callable $callback

Возвращает

self

Подробности свойств

$_autoFields protected

Отслеживает значение свойства $_autoFields объекта $query, переданного в конструктор.

Тип

bool|null

$_containMap protected

Список ассоциаций, которые должны быть загружены с нетерпением.

Тип

array

$_count protected

Содержит количество записей в этом наборе результатов.

Тип

int

$_current protected

Последняя извлеченная запись из оператора.

Тип

object|array

$_defaultAlias protected

По умолчанию псевдоним таблицы.

Тип

string

$_defaultTable protected

Экземпляр таблицы по умолчанию.

Тип

Cake\ORM\Table

$_driver protected

Объект драйвера базы данных.

Кэшируется в свойстве для избежания многократных вызовов одной и той же функции.

Тип

Cake\Database\DriverInterface

$_entityClass protected

Полное пространство имён класса, используемого для гидратации результатов.

Тип

string

$_hydrate protected

Нужно ли гидратировать результаты в объекты?

Тип

bool

$_index protected

Указывает на следующий номер записи, который нужно извлечь.

Тип

int

$_map protected

Карта полей, извлеченных из оператора с их типом и таблицей, к которой они относятся.

Тип

array

$_matchingMap protected

Список ассоциаций, которые должны быть помещены под результатом _matchingData.

Тип

array

$_matchingMapColumns protected

Список сопоставленных ассоциаций и ключей столбцов, которые ожидать от каждой из них.

Тип

array

$_results protected

Результаты, которые были извлечены или гидратированы в результаты.

Тип

SplFixedArray|array

$_statement protected

Оператор базы данных, содержащий результаты.

Тип

Cake\Database\StatementInterface

$_useBuffering protected

Буферизовать ли результаты, извлеченные из оператора?

Тип

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.3/class-Cake.ORM.ResultSet.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API