我有一个近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的产品属性?
谢谢!
答案 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)