如何从CakePHP 3的结果集中删除项目?

问题描述 投票:0回答:1

我想从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);
});
cakephp orm query-builder cakephp-3.x
1个回答
3
投票

我会问您是否实际上需要结果集,即实现\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()
© www.soinside.com 2019 - 2024. All rights reserved.