Có 2 cách để giải quyết vấn đề này, một là bằng cách lấy catalog/product
mô hình Magento và tải sản phẩm bằng ID sẽ cung cấp cho bạn toàn bộ sản phẩm, sau đó đặt tên và lưu nó.
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
try {
$product->save();
} catch(Exception $e) {
echo "{$e}";
}
Như OP đã chỉ ra, điều này khá nặng nề khi chỉ thay đổi một thuộc tính. Tôi hình dung rằng công cụ cập nhật hàng loạt thuộc tính nên sử dụng một cách sạch hơn để làm điều này và tìm thấy Mage_Catalog_Model_Resource_Product_Action
lớp
$product_id = 1;
$store_id = 0;
$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array($product_id), array(
'name' => 'foobar!'
), $store_id);
[CẬP NHẬT] điểm chuẩn
Một kịch bản điểm chuẩn nhanh chóng và kết quả đã nói lên điều đó.
$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";
Thời gian: 0,076527833938599 giây
Thời gian: 4.757472038269 giây