Ürün Modelinden Belirli bir [özel] Ürün Özelliği için değer nasıl kaydedilir?


12

Ürün Modelinden Belirli bir [özel] Ürün Özelliği için değer nasıl kaydedilir ?

Buradan aşağıdaki betiği buldum :

$product = Mage::getModel('catalog/product')->load(1); 

$product->setName('Some Random Name'); 

$product->getResource()->saveAttribute($product, 'name');

Yanıtlar:


32

Bunun için 2 yol var, biri Magento catalog/productmodelini alıp ürünü tüm kimliğe verecek olan kimliğe göre yükleyerek adı ayarlayıp kaydetmektir.

$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');

try {
   $product->save();
} catch(Exception $e) {
  echo "{$e}";
}

OP'nin işaret ettiği gibi, bu sadece bir özelliği değiştirmek için oldukça ağırdır. Öznitelik toplu güncelleme aracının bunu yapmak için daha temiz bir yol kullanması gerektiğini düşündüm ve Mage_Catalog_Model_Resource_Product_Actionsınıfı buldum

$product_id = 1;
$store_id = 0;

$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array($product_id), array(
    'name' => 'foobar!'
), $store_id);

[UPDATE] karşılaştırması

Hızlı bir kıyaslama senaryosu da böyleydi ve sonuçlar kendisi için konuştu.

$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";

Süre: 0.076527833938599 saniye

Süre: 4.757472038269 saniye


Cevap için teşekkürler Ama yukarıdaki komut dosyası yükler beri daha fazla zaman alır modeli. Cevap için teşekkürler Ama yukarıdaki komut dosyası yükler beri daha fazla zaman alır modeli.
Roney

Kodun bir güncellemesini yaptım
Sander Mangel

Rica ederim. Aslında zaten 2 ithalat komut dosyasında uygulanmış ve çok zaman kazandırır.
Sander Mangel

Küçük soru: Aradığınız cevap bu değil miydi? Değilse bana bildirin, eğer öyleyse lütfen Cevaplanan soru oranımızı yukarıda tutmak için soruyu kapatın :)
Sander Mangel

11

Yalnızca bir özelliği kaydetmeniz gerekiyorsa ve ürünü zaten yüklediyseniz bu yöntemi de kullanabilirsiniz:

$product->setData('attribute_code',$someData);
$product->getResource()->saveAttribute($product,'attribute_code');

Bu yöntem çok daha hızlı catalog/resource_product_action


Gönderi ve güncelliğini koruduğunuz için teşekkür ederiz. Ama garip bir davranış görüyorum. Bu tasarruf bana her zaman en iyi zamanı verdi. Ancak son zamanlarda 2 Magento örneğinde EE olanlarda bu, Save'in tamamlanması zaman alır. Bu örnekte bazı uzantılardan kaynaklanıyor olabilir. Başka bir konu düşünemiyorum. Bu Magento örnekleri şu anda yerel geliştirme sistemi tarafından açıktır ve henüz bir test sunucusu örneğine aktarılmamıştır.
zapping

@Fra, Sander'in koştuğu aynı ölçütü çalıştırmalısınız - iyi bir karşılaştırma olurdu!
Robbie Averill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.