Cake PHP Фильтры коллекции возвращают другой тип объекта? - PullRequest
0 голосов
/ 23 марта 2020

Я сталкиваюсь с неожиданным поведением в Cake PHP 3.x при использовании фильтров коллекции. Когда я предоставляю коллекцию типа Cake\Collection\Collection, фильтр возвращает новую коллекцию типа Cake\Collection\Iterator\FilterIterator.

. Вот пример кода, демонстрирующий поведение:

    $people = [
        ['name' => 'Alice', 'age' => 17],
        ['name' => 'Bob', 'age' => 51]
    ];
    $collection = new Collection($people);
    $adults = $collection->filter(function ($person, $key) {
        return $person['age'] > 17;
    });

Выходные данные отладки $collection и $adults показывает изменение типа:

object(Cake\Collection\Collection) {
    'count' => (int) 2
}
object(Cake\Collection\Iterator\FilterIterator) {
    'count' => (int) 1
}

Это изменение типа объекта вызывает непредвиденные проблемы в моем коде. Я решил проблему, перестроив коллекцию после каждого фильтра. Например:

$adults = new Collection($adults->toArray());

Это кажется немного уродливым. Есть ли лучший способ сохранить тип Cake\Collection\Collection? Любой совет приветствуется!

...