Могу ли я остановить CakePHP, извлекающий все строки для запроса? - PullRequest
2 голосов
/ 12 февраля 2009

Я использую CakePHP с $ modelName-> find (...) вызовы для выбора большого количества строк (может быть сотни)

Обычно в PHP / MySQL это, конечно, не будет проблемой, поскольку вы извлекаете их в цикле while Но CakePHP загружает все строки в массив, который исчерпывает память ограничение.

Есть ли способ использовать конструкции $ modelName-> find (...), но вернуть итератор для извлечения каждой строки по запросу?

Спасибо, David

Ответы [ 11 ]

0 голосов
/ 12 февраля 2009

Если вы используете хранимую процедуру для создания запроса, было бы неплохо имитировать поведение подкачки для одновременного получения сегментов запроса. В этом случае вы бы отправили в хранимую процедуру два дополнительных параметра для начального индекса строки и «page» -size, а затем изменили оператор SELECT, чтобы получить только те записи между row_index + 1 и row_index + page_size.

Все это может быть помещено в дополнительный слой зацикливания, так что вы получите новый сегмент, а затем внутри него пройдете каждую строку в этом сегменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...