1

特定の属性の値をすべての製品で (効率的に) 同じ値に設定するにはどうすればよいですか?

効率的とは、製品コレクション全体をループする必要がなく、1 つのトランザクションであることを意味します。

過去にMage_Catalog_Model_Product_Action、製品の一括更新に使用しましたが、かなり高速に実行されます

Mage::getSingleton('catalog/product_action')
    ->updateAttributes($productIds, array('some_attribute' => 'some_value'), 0)

ただし、更新する製品 ID を指定する必要がありWHERE entity_id IN(...)、MySQL ステートメントに巨大な句が作成されます。すべてに対してこれを行う方法はありますか?

4

2 に答える 2

2

以前も同じ問題がありました。ストアに 11096 製品 (ダウンロード可能な製品) を追加したとき、クライアントから製品に新しい属性を追加するように言われたので、1 つの属性 (タイプははい/いいえ) を作成し、属性セットに設定しました。今私の問題は、どのようにすべての製品を編集し、その属性をyesまたはnotに設定できるかです。設定しないと値がnullになるので、数行のコードを書きました。

このコードを確認してください。役に立つかもしれません。

$ProductId = Mage::getResourceModel('catalog/product_collection') -
addAttributeToFilter('type_id', Mage_Downloadable_Model_Product_Type::TYPE_DOWNLOADABLE) -
getAllIds(); //Now create an array of attribute_code => values

$attributeData = array("my_attribute_code" =>"my_attribute_value");

//Set the store to affect. I used admin to change all default values

$storeId = 0;

//Now Update the attribute for the given products.

Mage::getSingleton('catalog/product_action') ->updateAttributes($ProductId, $attributeData, $storeId);

それは私にとってはうまくいきました。あなたにとってうまくいくことを願っています

于 2013-07-26T05:27:38.133 に答える