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
如何解决这个问题?
答案 0 :(得分:2)
您正在查询对象上调用filter()
,这将导致查询被执行并转换为集合,并且不支持对集合进行分页。
如果使用分页,通常应该避免在PHP级别上操纵结果(添加/删除条目),这几乎肯定会弄乱您的分页,因为PHP级别上的记录数与计数的记录不匹配在SQL级别。
将过滤逻辑移至查询中,即在SQL级别进行过滤。