Я погоджуюся з Бен Лессані, що вам слід використовувати core/iterator
модель ресурсів для завантаження великих колекцій по одному ряду, якщо це можливо .
Однак існують обмеження. Як пояснено в " addAttributeToSelect не працює з core / resource_iterator? ", Це не працює добре з моделями EAV, якщо вам потрібно включити значення з таблиць значень атрибутів.
І пов'язаний приклад із StackOverflow насправді не настільки гарний, оскільки він повторює один і той же запит з різними LIMIT
виразами. Для складних запитів це може бути проблемою продуктивності, але ще важливіше, ви отримаєте дублікати, якщо між ними будуть додані нові рядки.
Кращий спосіб обробляти колекції в шматки - спочатку завантажити всі ідентифікатори, а потім використовувати ці ідентифікатори як фільтр для фактичної підказканої колекції.
Простий приклад для продуктів:
$ids = Mage::getModel('catalog/product')
->getCollection()
->getAllIds();
$page = 1;
do {
$collection = Mage::getModel('catalog/product')
->getCollection()
->addIdFilter($ids)
->setPageSize(100)
->setCurPage($page);
$results = $collection->load();
// do stuff ......
$page++;
} while ($results->count());