在Magento中使用产品ID获取大型集合的产品sku

在Magento中使用产品ID获取大型集合的产品sku,magento,Magento,我有一个近90000种产品的目录。我需要检索所有没有关联图像的产品sku。通过sql查询,我可以获得所有没有图像的产品的id列表。从这个ID我需要得到产品sku。因此,我有一个$ids阵列,其中包含所有没有图像的产品(接近60000) 我正试图通过使用magento api的一些简单功能来获取所有相应的SKU: foreach ($ids as $id){ $product = Mage::getModel('catalog/product')->load($id); echo

我有一个近90000种产品的目录。我需要检索所有没有关联图像的产品sku。通过sql查询,我可以获得所有没有图像的产品的id列表。从这个ID我需要得到产品sku。因此,我有一个$ids阵列,其中包含所有没有图像的产品(接近60000)

我正试图通过使用magento api的一些简单功能来获取所有相应的SKU:

foreach ($ids as $id){
   $product = Mage::getModel('catalog/product')->load($id);
   echo $product->getSku()."\n";
}
但这会导致一个PHP致命错误:允许的内存大小。。。(内存大小为1024Mb,我无法更改)


我的问题是:从这个$ids数组中,如何获得所有相应的sku而不导致内存大小错误?有没有一种更简便的方法来获取具有产品id的产品属性?

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

我想,下面的代码片段将适用于您:

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

foreach($productsCollection as $product) {
    echo $product->getSku();
}
Magento会自动将sku添加到选择中,但请注意,有时您可能希望获得一些自定义产品属性,例如代码为“颜色”的属性。然后需要添加
->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('*')

在不加载产品的情况下获取单独的属性

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

谢谢这就成功了。我不知道如何在getcollection中使用“$ids”数组。