Лучший способ итерации с помощью сбора продуктов

magento.stackexchange https://magento.stackexchange.com/questions/16540

  •  22-10-2019
  •  | 
  •  

Вопрос

Какой из этих методов является "Полегче«На платформе Magento, в частности в базе данных? Метод 1 использует один вызов в базе данных для извлечения коллекции, а затем итерации в результате. Метод 2 извлекает продукт внутри цикла при каждом пробеге.

Метод 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();
}

По сравнению с получением объекта продукта внутри петли:

Метод 2

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

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

Очевидно, этот код является только образец. Учитывая, что набор данных может содержать много сотен или тысяч продуктов, который является методом ».Правильно"Путь, или есть еще один, которого мне не хватает?

Это было полезно?

Решение

Метод 1 займет гораздо меньше времени, чтобы пройти, но будет потреблять много памяти.

Еще один вариант, который, вероятно, тот, который вы ищете, - это использование:

Mage::getSingleton('core/resource_iterator')

Это описывает это своего рода: Можно ли итерация над Magento Collections с национальной на странице?

Обязательно обратите внимание на пакетный итератор Кален Джорданhttps://gist.github.com/kalenjordan/5483065

Это можно использовать для элегантного выполнения очень больших наборов данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top