Synopsis
Je voulais charger un produit par SKU, il y a de nombreux articles, articles de blog, résultats de débordement de pile, etc. Tout ce que je veux savoir, c'est - pourquoi est-il si difficile de charger un produit par 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');
Bien sûr, j'attends beaucoup trop de Magento à ce stade une simple
façon de faire quelque chose (simple est un concept que Magento n'est clairement pas familier)
// This works:
$product = Mage::getModel('catalog/product');
$product->load($product->getIdBySku($sku));
loadByAttribute()
que vous n'obtenez pas toutes les données relatives aux produits. Il manquera des choses comme le stock et les objets multimédias.J'ai testé le temps d'exécution pour les différentes méthodes que j'ai vues pour charger un produit par SKU. C'est le plus efficace:
Tests:
Résultats des tests (en secondes):
la source
Pour charger un produit par SKU dans magento, vous pouvez utiliser le code suivant:
Je l'ai utilisé à chaque fois et cela fonctionne parfaitement. Si vous souhaitez charger plusieurs produits, essayez ceci
Source de référence http://magentoexplorer.com/how-load-product-by-sku-or-id-in-magento
la source
Comme déjà discuté, c'est parce que la méthode
Mage_Catalog_Model_Product::loadBySku
n'existe pas. Il doit y avoir une méthode appeléeloadBySku
dans la classeMage_Catalog_Model_Product
pour que vous puissiez l'utiliser.Vous pouvez également utiliser des
loadByAttribute()
méthodes pour obtenir les détails des produits par sku.Vous pouvez également consulter cet article pour plus de détails. https://www.ipragmatech.com/ultimate-magento-developer-guide-get-product-details-using-restapi-magento-1-x/
la source
Attention
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
!Cela peut fonctionner dans 99% des cas, mais cela se traduira par le chargement de l'attribut
stock_item
commeVarien_Object
au lieu desMage_CatalogInventory_Model_Stock_Item
méthodes commeMage_CatalogInventory_Model_Observer::checkQuoteItemQty
il appellera,$stockItem instanceof Mage_CatalogInventory_Model_Stock_Item
ce qui lèverait une exception!La meilleure façon est donc:
la source