La mejor manera de iterar a través de la recolección de productos
-
22-10-2019 - |
Pregunta
¿Cuál de estos métodos es "más fácil"En la plataforma Magento, específicamente la base de datos? El método 1 utiliza una llamada única a la base de datos para recuperar la colección, y luego itera sobre el resultado. El método 2 recupera el producto dentro del bucle en cada ejecución.
Método 1
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*') // <- obv a bad idea
->addAttributeToFilter(
'sku', array('in' => $productSkus)
)
->load();
foreach ($products as $product) {
echo $product->getName();
}
Versus obtener el objeto de producto dentro del bucle:
Método 2
$products = Mage::getModel('catalog/product');
foreach ($array as $key => value) {
$product = $products->load('PROD001', 'sku');
}
Obviamente, este código es solo una muestra. Teniendo en cuenta que el conjunto de datos podría contener muchos cientos o miles de productos, cuyo método es el "Correcto"Manera, ¿o hay otro que me falta?
Solución
El Método 1 tomará mucho menos tiempo en recorrer, pero consumirá mucha memoria.
Otra opción que probablemente sea la que está buscando es usar:
Mage::getSingleton('core/resource_iterator')
Esto lo describe más o menos: ¿Es posible iterar sobre las colecciones Magento con paginación de forma nativa?
Asegúrese de prestar atención al iterador por parte de Kalen Jordanhttps://gist.github.com/kalenjordan/5483065
Esto se puede usar para lograr conjuntos de datos muy grandes elegantemente.