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
) ...
ありがとう、ロッド