以下哪种方法是”更轻松“在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')

这描述了它: 是否有可能在本机上迭代分页上的洋红色收藏?

确保注意Kalen Jordan的批次迭代器https://gist.github.com/kalenjordan/5483065

这可以用来优雅地完成非常大的数据集。

许可以下: CC-BY-SA归因
scroll top