Я бы спросил, действительно ли вам нужен набор результатов, то есть объект, который реализует \Cake\Datasource\ResultSetInterface
.
Результат интерфейс set - это просто комбинация \Cake\Collection\CollectionInterface
, \Countable
и \Serializable
, что почти удовлетворяется CakePHP обычный класс коллекции, ie \Cake\Collection\Collection
, ему просто не хватает \Countable::count()
. Таким образом, коллекция, возвращаемая вашим filter()
вызовом, должна в большинстве случаев удовлетворять ваши потребности.
Если по какой-то причине вам придется пройти реализацию \Cake\Datasource\ResultSetInterface
, и вы абсолютно не можете изменить этот контракт ни на что По этой причине вы всегда можете передать свои данные новому декоратору набора результатов:
$resultSet = new \Cake\Datasource\ResultSetDecorator($collection->toArray());
Также вы можете манипулировать вашими данными на уровне запроса, просто не получая данные, которые вам не нужны, в Во-первых, ie исключите их в ваших where()
условиях или, отфильтровав в средство форматирования результата , вы сразу получите уменьшенный объект \Cake\Datasource\ResultSetInterface
из вашего запроса. :
$results = $this
->find()
->where(['xxx' => 'xxxx'])
->formatResults(function (\Cake\Collection\CollectionInterface $results) {
return $results->filter(/* ... */);
})
// ...