Saya setuju dengan Ben Lessani bahwa Anda harus menggunakan core/iterator
model sumber daya untuk memuat koleksi besar satu baris setiap kali jika memungkinkan .
Namun, ada batasannya. Seperti dijelaskan dalam " addAttributeToSelect tidak bekerja dengan core / resource_iterator? " Itu tidak berfungsi dengan baik dengan model EAV jika Anda perlu memasukkan nilai dari tabel nilai atribut.
Dan contoh yang ditautkan dari StackOverflow sebenarnya tidak begitu bagus karena mengulangi permintaan yang sama dengan LIMIT
ekspresi yang berbeda . Untuk kueri kompleks, ini mungkin masalah kinerja, tetapi yang lebih penting, Anda akan mendapatkan duplikat jika baris baru ditambahkan di antaranya.
Cara yang lebih baik untuk menangani koleksi dalam potongan adalah dengan terlebih dahulu memuat semua id, kemudian gunakan id ini sebagai filter untuk koleksi halaman yang sebenarnya.
Contoh sederhana untuk produk:
$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());