4

我有一个包含近 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 的产品属性?

4

2 回答 2

15

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

于 2012-10-16T08:47:12.210 回答
3

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

$resource = Mage::getResourceSingleton('catalog/product');    
$sku = $resource->getAttributeRawValue($productId, 'sku', $storeId)
于 2019-09-19T21:07:38.530 回答