CakePHP 3 - как фильтровать данные (сборник) в сочетании с нумерацией страниц? - PullRequest
0 голосов
/ 07 июня 2019

Сочетание функции 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 () File ... / public_html / продавец / CakePHP / CakePHP / SRC / Controller / Компонент / PaginatorComponent.php Линия: 174


Как решить эту проблему?

1 Ответ

2 голосов
/ 07 июня 2019

Вы вызываете filter() для объекта запроса, что приведет к выполнению запроса и его преобразованию в коллекцию, а разбиение на страницы коллекций не поддерживается.

Как правило, следует воздерживаться от манипулирования результатами(добавление / удаление записей) на уровне PHP, если вы используете нумерацию страниц, это почти наверняка испортит вашу нумерацию страниц, поскольку количество записей на уровне PHP не будет соответствовать подсчитанным записям на уровне SQL.

Вместо этого переместите логику фильтрации в запрос, то есть фильтр на уровне SQL.

...