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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top