Question

Laquelle de ces méthodes est " plus facile " sur la plate-forme Magento, en particulier la base de données? Méthode 1 utilise un appel unique à la base de données pour récupérer la collection, et puis itère sur le résultat. Méthode 2 extrait le produit à l'intérieur de la boucle sur chaque essai.

Méthode 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 obtenir l'objet produit à l'intérieur de la boucle:

Méthode 2

$products = Mage::getModel('catalog/product');

foreach ($array as $key => value) {
    $product = $products->load('PROD001', 'sku');
}

Il est évident que ce code est seulement un échantillon. Compte tenu de l'ensemble de données peut contenir plusieurs centaines ou des milliers de produits, ce procédé est le « droite » façon, ou est-il une autre que je suis absent?

Était-ce utile?

La solution

Méthode 1 va prendre beaucoup moins de temps à la boucle à travers, mais consomme beaucoup de mémoire.

Une autre option qui est probablement celui que vous cherchez utilise le:

Mage::getSingleton('core/resource_iterator')

décrit en quelque sorte: est-il possible d'itérer sur des collections Magento avec nativement en page?

Assurez-vous de faire attention à Iterator par Kalen lots # Jordan https://gist.github.com/kalenjordan/5483065

Ceci peut être utilisé pour réaliser des ensembles de données très grande élégance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top