LoadBySku () kullanarak bir Ürünü SKU Tarafından Neden Yükleyemiyorum?


27

özet

Bir ürünü SKU'dan yüklemek istedim, pek çok makale, blog yazısı, yığın taşması sonuçları vb. Var.

// This method does not work (Of all, I expect this to work)
$product = Mage::getModel('catalog/product')->loadBySku($sku);

// These do not work either
$product = Mage::getModel('catalog/product')->loadByAttribute($sku, 'sku');
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);

// This does not work
$product = Mage::getModel('catalog/product')->load($sku, 'sku');

Tabii ki, bu noktada bir simpleşey yapmanın bir yolunu Magento'dan çok fazla bekliyorum (basitçe Magento'nun aşina olmadığı bir kavramdır)

// This works:
$product = Mage::getModel('catalog/product');
$product->load($product->getIdBySku($sku));

Yanıtlar:


56
// This method does not work (Of all, I expect this to work)
$product = Mage::getModel('catalog/product')->loadBySku($sku);

Bunun nedeni, yöntemin Mage_Catalog_Model_Product::loadBySkumevcut olmamasıdır. Bazı sihirli yöntem olmadıkça, onu kullanabilmeniz loadBySkuiçin sınıfta adı verilen bir yöntem olmalıdır Mage_Catalog_Model_Product.

// These do not work either
$product->getModel('catalog/product')->loadByAttribute($sku, 'sku');
$product->getModel('catalog/product')->loadByAttribute('sku', $sku);

Yukarıdaki yazım hataları içerir. Aşağıdaki gibi olmalı. Ürün nesnesiyle bir şeyler yapmadan önce neyin Mage::getModel()->load()geri döneceğini belirlemeniz gerekir $product.

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);

Bununla birlikte loadByAttribute, stok ve medya galerisi gibi ilgili nesneleri almadığınızı unutmayın . Daha Mage_Catalog_Model_Abstract::loadByAttributefazla bilgi için bakınız .


1
Yazım hatası düzeltildi;) Yalnızca Magento'daki temel özelliklerin neden bu kadar karmaşık olduğunu anlamaya çalışıyorum. Mimari değişikliklerle ilgiliyse, bunları öğrenmek faydalı olacaktır. Küçük ve basit fonksiyonel değişiklikleri tamamlamaya çalışırken boşa harcanan zaman aptalcadır - Yeniden kullanılabilir modüller alıyorum ama bazen her şey tekrar kullanılamaz.
Ash

Ürün yükleme işleminin nasıl yürüdüğünü anlıyor musunuz? İlk başta aynı şekilde hissettim, ama daha iyi olur.
musicliftsme

3
Anlıyorum, bazen Magento'nun kalıplarla karşılaştırıldığında geriye doğru olduğunu buluyorum.
kül

$ product = Mage :: getModel ('katalog / ürün') -> loadByAttribute ('sku', $ sku); benim için çalışıyor :) teşekkürler !!!
jruzafa

@jruzafa, loadByAttribute()ilgili tüm ürün verilerini alamadığınızı unutmayın . Hisse senedi ve medya nesneleri gibi şeyler eksik olacak.
musicliftsme,

21

Ürünü SKU tarafından yüklemek için gördüğüm çeşitli yöntemler için yürütme süresini test ettim. Bu en verimli olanıdır:

$product = Mage::getModel('catalog/product');
$product->load($product->getIdBySku($data['sku']));

Testler:

$time_start = microtime();
$product1 = Mage::getModel('catalog/product')->loadByAttribute('sku', $data['sku']);
$time_end = microtime();
$time1 = $time_end - $time_start;

$time_start = microtime();
$product2 = Mage::getSingleton('catalog/product')->getCollection()
            ->addAttributeToFilter('sku', $data['sku'])
            ->addAttributeToSelect('*')
            ->getFirstItem();
        // do a full product load, otherwise you might get some errors related to stock item
        $product2->load($product2->getId());
$time_end = microtime();
$time2 = $time_end - $time_start;

$time_start = microtime();
$product3 = Mage::getModel('catalog/product');
$product3->load($product3->getIdBySku($data['sku']));
$time_end = microtime();
$time3 = $time_end - $time_start;

echo "<pre>time1: $time1\ntime2: $time2\ntime3: $time3</pre>";

Test sonuçları (saniye olarak):

time1: 0.024642
time2: 0.079715
time3: 0.007891

bu kriter yetersiz, sadece tek seferde muhtemel çeşitlilik yüksek. Ayrıca DB içindeki önbellek, buradaki sonuçlar üzerinde büyük bir etkiye sahip olabilir
Flyingmana

1

Magento'da ürünü SKU'ya yüklemek için aşağıdaki kodu kullanabilirsiniz:

$_sku = 'leathershoes';
$_product = Mage::getModel('catalog/product')->loadByAttribute('sku',$_sku);
print $_product->getName(); // display product name

Bunu her zaman kullandım ve mükemmel çalışıyor. Birden fazla ürün yüklemek istiyorsanız, bunu deneyin

$productSku = array('234', '267', '4523', 'Leather shoes', 'skin care'); // insert product SKU here
$attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
$collection = Mage::getModel('catalog/product')
                ->getCollection()                
                ->addAttributeToFilter('sku', array('in' => $productSku))
                ->addAttributeToSelect($attributes);

Referans kaynağı http://magentoexplorer.com/how-load-product-by-sku-or-id-in-magento


0

Zaten Tartışıldığı gibi, bunun nedeni yöntem Mage_Catalog_Model_Product::loadBySkuolmadığıdır. Kullanabilmeniz loadBySkuiçin sınıfta denilen bir yöntem olmalıdır Mage_Catalog_Model_Product.

loadByAttribute()Sku ile ürün detaylarını almak için yöntemleri de kullanabilirsiniz .

    $sku  =  $this->getRequest()->getParam('SKU');
    $catalogMageObj = Mage::getModel('catalog/product');
    $products = $catalogMageObj->loadByAttribute('sku', $sku);

    // get the products details which you want
    $data = array(
    'id' => $products->getEntityId(),
    'sku' => $products->getSku(),
    'name' => $products->getName(),
    'attribute_set_id' => (int)$products->getAttributeSetId(),
    'price' => $products->getPrice(),
    'status' => $products->getStatus(),
    'visibility' => $products->getVisibility(),
    'type_id' => $products->getTypeId(),
    'created_at' => $products->getCreatedAt(),
    'updated_at' => $products->getUpdatedAt(),
    'product_links' => $productstypes, 
    'custom_attributes'  => $custom_attributes
);

// return the response as array
return $data;

Daha fazla bilgi için bu makaleye bir göz atabilirsiniz. https://www.ipragmatech.com/ultimate-magento-developer-guide-get-product-details-using-restapi-magento-1-x/


0

Dikkat $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);!
Bu vakaların% 99 çalışabilir, ancak bu özelliğin yüklenmesi neden olacaktır stock_itemolarak Varien_Objectyerine Mage_CatalogInventory_Model_Stock_Itemgibi yöntemlerle bu kadar Mage_CatalogInventory_Model_Observer::checkQuoteItemQtyçağıracağı $stockItem instanceof Mage_CatalogInventory_Model_Stock_Itembir istisna hangi!

Yani en iyi yol:

$product = Mage::getModel('catalog/product');
$product->setStoreId($storeId)->load($product->getIdBySku($sku));
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.