Лучший способ итерации с помощью сбора продуктов
-
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
Это можно использовать для элегантного выполнения очень больших наборов данных.