Sinopsis
Quería cargar un producto por SKU, hay muchos artículos, publicaciones de blog, resultados de desbordamiento de pila, etc. Todo lo que quiero saber es: ¿por qué tiene que ser tan difícil cargar un producto por un 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');
Por supuesto, estoy esperando demasiado de Magento en este momento una simple
forma de hacer algo (simple es un concepto con el que Magento claramente no está familiarizado)
// This works:
$product = Mage::getModel('catalog/product');
$product->load($product->getIdBySku($sku));
loadByAttribute()
que no obtiene todos los datos relacionados del producto. Faltarán cosas como el stock y los objetos multimedia.Probé el tiempo de ejecución de los diversos métodos que he visto para cargar un producto por SKU. Este es el más eficiente:
Pruebas:
Resultados de la prueba (en segundos):
fuente
Para cargar el producto por SKU en magento, puede usar el siguiente código:
Usé esto cada vez y funciona perfectamente. Si desea cargar varios productos, intente esto
Fuente de referencia http://magentoexplorer.com/how-load-product-by-sku-or-id-in-magento
fuente
Como ya comentamos, esto se debe a que el método
Mage_Catalog_Model_Product::loadBySku
no existe. Debe haber un método llamadoloadBySku
en la claseMage_Catalog_Model_Product
para que pueda usarlo.También puede usar
loadByAttribute()
métodos para obtener los detalles de los productos por sku.También puede consultar este artículo para obtener más detalles. https://www.ipragmatech.com/ultimate-magento-developer-guide-get-product-details-using-restapi-magento-1-x/
fuente
¡Cuidado con
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
!Puede funcionar el 99% de los casos, pero esto dará como resultado la carga del atributo,
stock_item
ya que enVarien_Object
lugar deMage_CatalogInventory_Model_Stock_Item
hacerloMage_CatalogInventory_Model_Observer::checkQuoteItemQty
, se llamarán métodos como los$stockItem instanceof Mage_CatalogInventory_Model_Stock_Item
que arrojarían una excepción.Entonces la mejor manera es:
fuente