我想从ResultSet中删除一些指定的项目这意味着我最后需要一个ResultSet对象。
是否有任何方法可从ResultSet中删除项目或从现有ResultSet中创建另一个ResultSet?
我尝试使用filter()或reject()。但是,它们不返回ResultSet对象吗?
$ids = [123, 234, 456];
$results = $this->find()
->where(['xxx' => 'xxxx'])
->all();
$newResults = $results->filter(function ($result) {
return in_array($result->id, $ids);
});
我会问您是否实际上需要结果集,即实现\Cake\Datasource\ResultSetInterface
的对象。
结果集接口只是\Cake\Datasource\ResultSetInterface
,\Cake\Collection\CollectionInterface
和\Countable
的组合,这几乎由CakePHP的常规集合类(即\Countable
)满足,但缺少\Serializable
。因此,在大多数情况下,您的\Serializable
调用返回的集合应满足您的需求。
如果由于某种原因而被迫通过\Cake\Collection\Collection
实现,并且由于任何原因您绝对不能更改该合同,那么您始终可以将数据传递给新的结果集装饰器:
\Countable::count()
[此外,您可以在查询级别上操作数据,只需不首先检索不需要的数据,即在filter()
条件中排除它们,或通过在\Cake\Datasource\ResultSetInterface
中进行过滤,然后会直接从您的查询中收到一个简化的$resultSet = new \Cake\Datasource\ResultSetDecorator($collection->toArray());
对象:
where()