लोडबायस्कु () का उपयोग करके मैं SKU द्वारा उत्पाद लोड क्यों नहीं कर सकता?


27

सार

मैं SKU द्वारा एक उत्पाद लोड करना चाहता था, कई लेख, ब्लॉग पोस्ट, स्टैक ओवरफ्लो परिणाम आदि हैं। सभी मैं जानना चाहता हूं - एक SKU द्वारा उत्पाद लोड करना इतना मुश्किल क्यों होता है?

// 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');

बेशक, मैं इस बिंदु पर Magento से बहुत अधिक उम्मीद कर रहा हूँ simpleकुछ करने का एक तरीका (सरल एक अवधारणा है Magento स्पष्ट रूप से परिचित नहीं है)

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

जवाबों:


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

इसका कारण यह है कि विधि Mage_Catalog_Model_Product::loadBySkuमौजूद नहीं है। आपके लिए इसका उपयोग करने में सक्षम होने के लिए loadBySkuकक्षा में एक विधि होनी चाहिए Mage_Catalog_Model_Product, जब तक कि यह कुछ जादुई विधि न हो।

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

उपरोक्त में टाइपो शामिल है। यह नीचे की तरह होना चाहिए। आपको उत्पाद ऑब्जेक्ट के साथ सामान Mage::getModel()->load()करने $productसे पहले क्या रिटर्न करना है, यह निर्दिष्ट करना होगा ।

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

ध्यान दें loadByAttribute, आपको स्टॉक और मीडिया गैलरी जैसी संबंधित वस्तुएं नहीं मिलती हैं। Mage_Catalog_Model_Abstract::loadByAttributeअधिक जानकारी के लिए देखें ।


1
टाइपो को ठीक किया गया है;) मैं केवल यह समझने की कोशिश कर रहा हूं कि मैगेंटो में बुनियादी विशेषताएं इतनी जटिल क्यों हैं। यदि यह आर्किटेक्चर परिवर्तनों के साथ करना है तो इन के बारे में सीखना उपयोगी होगा। छोटे और सरल कार्यात्मक परिवर्तनों को पूरा करने की कोशिश में जितना समय बर्बाद होता है वह बेवकूफी है - मुझे लगता है कि पुन: प्रयोज्य मॉड्यूल तरीका है, लेकिन कभी-कभी सब कुछ पुन: प्रयोज्य नहीं हो सकता है।
राख

क्या आप समझते हैं कि उत्पाद लोडिंग कैसे काम करता है, हालांकि? मुझे पहली बार में ऐसा ही लगा, लेकिन यह बेहतर है।
म्यूज़िकलिफ्ट्समे

3
मैं इसे समझता हूं, मैं कभी-कभी मैग्नेटो को पैटर्न की तुलना में पीछे की ओर पाता हूं।
ऐश

$ उत्पाद = दाना :: getModel ('कैटलॉग / उत्पाद') -> loadByAttribute ('sku', $ sku); यह मेरे लिए काम करता है :) धन्यवाद !!!
jruzafa

@jruzafa, ध्यान दें loadByAttribute()कि आपको सभी संबंधित उत्पाद डेटा नहीं मिलते हैं। यह स्टॉक और मीडिया ऑब्जेक्ट्स जैसी चीजें गायब होंगी।
म्यूज़िकलिफ्ट्समे

21

मैंने SKU द्वारा किसी उत्पाद को लोड करने के लिए देखी गई विभिन्न विधियों के लिए निष्पादन समय का परीक्षण किया। यह सबसे कुशल है:

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

टेस्ट:

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

परीक्षा परिणाम (सेकंड में):

time1: 0.024642
time2: 0.079715
time3: 0.007891

यह बेंचमार्क अपर्याप्त है, सिर्फ एक रन में संभव भिन्नता उच्च करने के लिए कर रहे हैं। साथ ही डीबी के अंदर कैश का यहां के नतीजों पर बड़ा असर हो सकता है
फ्लाइंगमैन

1

Magento में SKU द्वारा उत्पाद लोड करने के लिए आप निम्नलिखित कोड का उपयोग कर सकते हैं:

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

मैंने हर बार इसका इस्तेमाल किया और यह पूरी तरह से काम करता है। यदि आप कई उत्पादों को लोड करना चाहते हैं, तो यह प्रयास करें

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

संदर्भ स्रोत http://magentoexplorer.com/how-load-product-by-sku-or-id-in-magento


0

जैसा कि पहले से ही चर्चा है, यह इसलिए है क्योंकि विधि Mage_Catalog_Model_Product::loadBySkuमौजूद नहीं है। आपके लिए इसका उपयोग करने में सक्षम होने के लिए loadBySkuकक्षा में एक विधि होनी चाहिए Mage_Catalog_Model_Product

आप loadByAttribute()sku द्वारा उत्पादों के विवरण प्राप्त करने के लिए विधियों का भी उपयोग कर सकते हैं ।

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

अधिक जानकारी के लिए आप इस लेख को देख सकते हैं। https://www.ipragmatech.com/ultimate-magento-developer-guide-get-product-details-using-restapi-magento-1-x/


0

से सावधान $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);!
यह मामलों के 99% काम कर सकते हैं, लेकिन यह विशेषता लोड हो रहा है का परिणाम देगा stock_itemके रूप में Varien_Objectके बजाय Mage_CatalogInventory_Model_Stock_Itemतरीकों पर तो जैसे Mage_CatalogInventory_Model_Observer::checkQuoteItemQtyयह फोन करेगा $stockItem instanceof Mage_CatalogInventory_Model_Stock_Itemजो एक अपवाद फेंक होता!

तो सबसे अच्छा तरीका है:

$product = Mage::getModel('catalog/product');
$product->setStoreId($storeId)->load($product->getIdBySku($sku));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.