2

Magento の動作に奇妙な点があることに気付きました。バグのように見えるか、何かを見逃していました...製品を取得するための簡単なクエリを実行します

$collection = Mage::getResourceModel('catalog/product_collection')                                        
                                        ->addAttributeToSelect('price')
                                        ->addAttributeToSelect('sku')
                                        ->addAttributeToSelect('name')
                                        ->addAttributeToFilter(array(array(
                                                'attribute' => 'my_attribute',
                                                'eq' => 'my_value'          )
                                            ));
//Then I update 
foreach($collection as $_product){ 
  $_product->setData("name","my_other_val");  
   $_product->save();
}

Magento は「名前」を更新するだけでなく、すべての必須フィールドを更新し、デフォルト値を設定します!! たとえば、製品が別の可視性を持っていたときに、「可視性」属性を「検索、カタログ」に変更します!! 現在、構成可能な製品が混乱しており、他の属性も変更されています。

これをどう説明しますか?

私は逆を行い、製品の保存中に属性のリスト全体が取得されます。このメソッドは walkAttributes です。

すべての属性を取得します。これらには値がない (addAttributeToSelect セクションにない) ため、デフォルト値が使用されます。1 つの解決策は、->addAttributeToSelect('visibility') とすべての必要な属性を追加することです。しかし、あまりにも危険です。1 つ見逃す可能性があります。または、新しい属性が必要な属性とともに追加される可能性があります。

デフォルト値は存在しない属性値にのみ適用する必要があるため、私にとってはバグですが、magento はチェックを行わず、INSERT または UPDATE のいずれかでこのクエリを実行します。 SQL: INSERT INTO catalog_product_entity_int( entity_type_id, attribute_id, store_id, entity_id, value) VALUES ( ?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE値 = 値( value) ...

ありがとう、ロッド

4

2 に答える 2