Domanda

Quale di questi metodi è " più facile " sulla piattaforma Magento, in particolare la base di dati? Metodo 1 utilizza una singola chiamata al database per recuperare la raccolta, e quindi itera sul risultato. Metodo 2 recupera il prodotto all'interno del ciclo in ogni esecuzione.

Metodo 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 ottenere l'oggetto del prodotto all'interno del ciclo:

Metodo 2

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

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

Ovviamente questo codice è solo un esempio. Considerando l'insieme di dati potrebbe contenere molte centinaia o migliaia di prodotti, quale sia il metodo " destro " via, o c'è un altro che mi manca?

È stato utile?

Soluzione

Metodo 1 sta andando a prendere molto meno tempo per eseguire il ciclo, ma si consumano molta memoria.

Un'altra opzione che è probabilmente quello che si sta cercando è utilizzando il:

Mage::getSingleton('core/resource_iterator')

Questo descrive una sorta di: E 'possibile per iterare su collezioni di Magento con impaginazione in modo nativo?

Assicurati di prestare attenzione alla a batch Iterator da Kalen Jordan https://gist.github.com/kalenjordan/5483065

Questo può essere usato per realizzare grandi serie di dati molto elegante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top