CakePHP 3-如何结合分页来过滤数据(集合)?

时间:2019-06-07 10:03:57

标签: cakephp pagination filtering cakephp-3.x

Collection函数(在我的情况下为'filter')和paginate()的组合会导致错误。简化的PHP代码如下:

$rooms = $this->Rooms
    ->find('all')
    ->formatResults(function ($results) {
        return $results->map(function ($row) {
            //... 
            $row->free_booking=0;      
            if($someCondition) $row->free_booking=1;
            //...

            return $row;
        });        
    })
    ->filter(function ($booking, $key) {
        return $booking->free_booking == 1;
    });
$this->set('rooms',$this->paginate($rooms));

错误如下:

  

错误:调用未定义的方法ArrayIterator :: alias()文件   ... / public_html / vendor / cakephp / cakephp / src / Controller / Component / PaginatorComponent.php   线:174


如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您正在查询对象上调用filter(),这将导致查询被执行并转换为集合,并且不支持对集合进行分页。

如果使用分页,通常应该避免在PHP级别上操纵结果(添加/删除条目),这几乎肯定会弄乱您的分页,因为PHP级别上的记录数与计数的记录不匹配在SQL级别。

将过滤逻辑移至查询中,即在SQL级别进行过滤。