Sinopse
Eu queria carregar um produto por SKU, existem muitos artigos, postagens no blog, resultados de estouro de pilha, etc. Tudo o que quero saber é: por que tem que ser tão difícil carregar um produto por um 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');
Obviamente, estou esperando demais do Magento neste momento uma simple
maneira de fazer algo (simples é um conceito que o Magento claramente não está familiarizado)
// This works:
$product = Mage::getModel('catalog/product');
$product->load($product->getIdBySku($sku));
loadByAttribute()
que você não obtém todos os dados de produtos relacionados. Faltam coisas como os objetos de estoque e mídia.Testei o tempo de execução para os vários métodos que vi para carregar um produto por SKU. Este é o mais eficiente:
Testes:
Resultados do teste (em segundos):
fonte
Para carregar o produto por SKU no magento, você pode usar o seguinte código:
Eu usei isso toda vez e funciona perfeitamente. Se você deseja carregar vários produtos, tente este
Fonte de referência http://magentoexplorer.com/how-load-product-by-sku-or-id-in-magento
fonte
Como já discutimos, isso ocorre porque o método
Mage_Catalog_Model_Product::loadBySku
não existe. Deve haver um método chamadoloadBySku
na classeMage_Catalog_Model_Product
para que você possa usá-lo.Você também pode usar
loadByAttribute()
métodos para obter os detalhes dos produtos por sku.Você também pode dar uma olhada neste artigo para obter mais detalhes. https://www.ipragmatech.com/ultimate-magento-developer-guide-get-product-details-using-restapi-magento-1-x/
fonte
Cuidado com
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
!Pode funcionar 99% dos casos, mas isso resultará no carregamento do atributo,
stock_item
pois, emVarien_Object
vez dissoMage_CatalogInventory_Model_Stock_Item
, em métodos comoMage_CatalogInventory_Model_Observer::checkQuoteItemQty
o chamado, o$stockItem instanceof Mage_CatalogInventory_Model_Stock_Item
que geraria uma exceção!Portanto, a melhor maneira é:
fonte