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 Fatal error: Allowed memory size... (メモリ サイズは 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 に答える