2012-10-16 262 views
3

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

我尝试使用一些容易与Magento的API来获取所有相应的SKU:

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

但是这会导致PHP致命错误:让内存大小...(内存大小1024MB是和我无法改变它)。

我的问题是:从这个$ ids数组,我怎么能得到所有相应的sku而不会导致内存大小错误?是否有一种更轻松的方式来获得具有产品ID的产品属性?

谢谢!

回答

14

当前您正在加载大量不需要的产品数据,这会导致致命错误。在你的情况下,你只需要产品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(“*”)

+0

谢谢!这个伎俩。我不知道如何在getcollection中使用'$ ids'数组。 – PauGNU