我注意到 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 它这样做: case 'backend': $instance = $attribute->getBackend();
检索所有属性。由于它们没有值(它们不在 addAttributeToSelect 部分中),因此它使用默认值。一种解决方案是添加 ->addAttributeToSelect('visibility') 和所有必需的属性。但是太危险了,我可能会错过一个,或者可以添加一个带有所需属性的新属性,对吗?
对我来说这是一个错误,因为默认值应该只适用于非现有属性值,但 magento 不做检查,它会执行 INSERT 或 UPDATE.. SQL: INSERT INTO catalog_product_entity_int
( entity_type_id
, attribute_id
, store_id
, entity_id
, value
) VALUES ( ?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?) 重复键更新价值=价值(value
)...
谢谢, 罗德