使用大型系列的产品ID在Magento中获取产品sku

时间:2012-10-16 08:12:13

标签: magento

我有一个近90000种产品的目录。我需要检索没有图像关联的所有产品sku。使用sql查询,我可以获得没有图像的所有产品的id列表。从该ID我需要获得产品sku。所以,我有一个$ ids数组,所有产品都没有图像(接近60000)。

我正试图通过使用magento api轻松获得所有相应的skus:

foreach ($ids as $id){
   $product = Mage::getModel('catalog/product')->load($id);
   echo $product->getSku()."\n";
}

但这会导致PHP致命错误:允许的内存大小...(内存大小为1024Mb,我无法更改)。

我的问题是:从这个$ ids数组中,如何在不造成内存大小错误的情况下获取所有相应的sku?是否有更轻松的方法来获得具有产品ID的产品属性?

谢谢!

2 个答案:

答案 0 :(得分:14)

目前您正在加载大量不需要的产品数据,这会导致致命错误。在您的情况下,您只需要产品sku。我建议使用Magento系列。

我想,以下代码段对您有用:

$productsCollection = Mage::getModel('catalog/product')
                    ->getCollection()
                    ->addAttributeToFilter('entity_id', array('in' => $ids));

foreach($productsCollection as $product) {
    echo $product->getSku();
}

Magento会自动将sku添加到选择中,但请注意,有时您可能希望获得一些自定义产品属性,例如:代码为“color”的属性。然后你需要添加->addAttributeToSelect('color'),代码如下:

$productsCollection = Mage::getModel('catalog/product')
                    ->getCollection()
                    ->addAttributeToFilter('entity_id', array('in' => $ids))
                    ->addAttributeToSelect('color');

foreach($productsCollection as $product) {
    echo $product->getSku();
    echo $product->getColor();
}

如果您想获得可以使用的所有产品属性 - > addAttributeToSelect('*')

答案 1 :(得分:1)

要获取单独的属性而不加载产品

$resource = Mage::getResourceSingleton('catalog/product');    
$sku = $resource->getAttributeRawValue($productId, 'sku', $storeId)
相关问题