在Magento中使用产品ID获取大型集合的产品sku
我有一个近90000种产品的目录。我需要检索所有没有关联图像的产品sku。通过sql查询,我可以获得所有没有图像的产品的id列表。从这个ID我需要得到产品sku。因此,我有一个$ids阵列,其中包含所有没有图像的产品(接近60000) 我正试图通过使用magento api的一些简单功能来获取所有相应的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
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”数组。