আমি কেন এসকিউ দ্বারা লোডবাইস্কু () ব্যবহার করে কোনও পণ্য লোড করতে পারি না?


27

সংক্ষিপ্তসার

আমি এসকিউ দ্বারা একটি পণ্য লোড করতে চেয়েছিলাম সেখানে অনেকগুলি নিবন্ধ, ব্লগ পোস্ট, স্ট্যাক ওভারফ্লো ফলাফল ইত্যাদি রয়েছে All আমি শুধু জানতে চাই - এসকিউ দ্বারা কোনও পণ্য লোড করা কেন এতটা কঠিন হতে হয়?

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

অবশ্যই, আমি এই মুহুর্তে ম্যাজেন্টো থেকে অনেক simpleকিছু করার একটি উপায় আশা করছি (সহজ ধারণা একটি ধারণা ম্যাগেন্টো স্পষ্টভাবে পরিচিত নয়)

// 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()যে আপনি সম্পর্কিত সমস্ত ডেটা পাবেন না। এটি স্টক এবং মিডিয়া অবজেক্টের মতো জিনিসগুলি হারিয়ে যাবে।
মিউজিক লিফটসমে

21

এসকিউ দ্বারা কোনও পণ্য লোড করতে দেখা বিভিন্ন পদ্ধতির জন্য আমি মৃত্যুদন্ডের সময় পরীক্ষা করেছি। এটি সবচেয়ে দক্ষ:

$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

ম্যাজেন্টোতে এসকিউ দ্বারা পণ্য লোড করতে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

$_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  =  $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));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.