Tôi đồng ý với Ben Lessani rằng bạn nên sử dụng core/iterator
mô hình tài nguyên để tải các bộ sưu tập lớn một hàng mỗi lần nếu có thể .
Tuy nhiên, có những hạn chế. Như đã giải thích trong " addAttributionToSelect không hoạt động với core / resource_iterator? ", Nó không hoạt động tốt với các mô hình EAV nếu bạn cần bao gồm các giá trị từ các bảng giá trị thuộc tính.
Và ví dụ được liên kết từ StackOverflow thực sự không tốt vì nó lặp lại cùng một truy vấn với các LIMIT
biểu thức khác nhau . Đối với các truy vấn phức tạp, đây có thể là một vấn đề về hiệu năng, nhưng thậm chí quan trọng hơn, bạn sẽ nhận được các bản sao nếu các hàng mới được thêm vào giữa.
Một cách tốt hơn để xử lý các bộ sưu tập trong các khối là trước tiên tải tất cả các id, sau đó sử dụng các id này làm bộ lọc cho bộ sưu tập phân trang thực tế.
Ví dụ đơn giản cho các sản phẩm:
$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());