Я сталкиваюсь с неожиданным поведением в 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
? Любой совет приветствуется!