답변:
이 작업을 수행하는 두 가지 방법이 있습니다. 하나는 Magento catalog/product
모델 을 가져와 ID별로 제품을로드하여 전체 제품을 제공 한 다음 이름을 설정하고 저장하는 것입니다.
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
try {
$product->save();
} catch(Exception $e) {
echo "{$e}";
}
OP가 지적했듯이 하나의 속성을 변경하는 것만으로도 무겁습니다. 나는 속성 대량 업데이트 도구가 더 깔끔한 방법으로 이것을 수행하고 Mage_Catalog_Model_Resource_Product_Action
클래스를 찾아야한다고 생각했습니다.
$product_id = 1;
$store_id = 0;
$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array($product_id), array(
'name' => 'foobar!'
), $store_id);
[업데이트] 벤치 마크
빠른 벤치 마크 스크립트도 마찬가지였으며 결과는 그 자체입니다.
$starttime = microtime(true);
for ($i=20; $i>0; $i--)
{
$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array(1), array(
'name' => 'foobar!'
), 0);
}
echo "Time: " . (microtime(true) - $starttime) . " seconds\n";
$starttime = microtime(true);
for ($i=20; $i>0; $i--)
{
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
$product->save();
unset($product);
}
echo "Time: " . (microtime(true) - $starttime) . " seconds\n";
시간 : 0.076527833938599 초
시간 : 4.757472038269 초
하나의 속성 만 저장해야하고 이미 제품을로드 한 경우이 방법을 사용할 수도 있습니다.
$product->setData('attribute_code',$someData);
$product->getResource()->saveAttribute($product,'attribute_code');
이 방법은보다 훨씬 빠릅니다 catalog/resource_product_action