Obtenez la quantité de stock de produits dans magento

12

J'ai besoin d'obtenir la quantité de stock de produit pour l'article, comment l'obtenir

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToSelect(array('name', 'thumbnail', 'weight' ,'price','description'));

foreach ($products as $product) {
    $p['products'][] = array(
        'id'        => $product->getId(),
        'sku'       => $product->getSku(),
        'name'      => $product->getName(),
        'description'   => $product->getDescription(),
        'weight'      => $product->getWeight(),
        'created at'    => $product->getCreatedAt(),
        'pirce'     => Mage::helper('core')->currency($product->getPrice(), true, false), //." ".$currencyCode,
    );
}
vellai durai
la source

Réponses:

10

Vous devrez rejoindre la table pour obtenir la quantité.

Voir ci-dessous le code:

$products = Mage::getModel('catalog/product')
    ->getCollection()
    //->addAttributeToSelect('*')
    ->addAttributeToSelect(array('name', 'thumbnail', 'weight' ,'price','description'))
    ->joinField(
        'qty',
        'cataloginventory/stock_item',
        'qty',
        'product_id=entity_id',
        '{{table}}.stock_id=1',
        'left'
    );

foreach ($products as $product) {
    $p['products'][] = array(
        'id'            => $product->getId(),
        'sku'           => $product->getSku(),
        'name'          => $product->getName(),
        'description'   => $product->getDescription(),
        'weight'        => $product->getWeight(),
        'created at'    => $product->getCreatedAt(),
        'pirce'         => Mage::helper('core')->currency($product->getPrice(), true, false), //." ".$currencyCode,
        //get qty
        'qty'           => $product->getQty(),
    );
}

Comment obtenir la valeur d'attribut créée ici, par exemple, j'ai créé un attribut nommé taille comment récupérer cette valeur

MISE À JOUR (Bien que vous devriez demander dans un autre qst, mais je répondrai ici pour vous.)

Pour obtenir un attribut personnalisé, vous devrez ajouter un attribut dans la ->addAttributeToSelectsection.

Ça ne marche toujours pas?

Vous devrez peut-être charger un modèle de produit, car j'ai parfois constaté que tous les attributs personnalisés ne sont pas attachés lorsque vous le retirez d'une collection (destiné à des raisons de performances, je suppose). Quelque chose comme:

$_product = Mage::getModel('catalog/product')->load($product->getId());
$size = $_product->getSize();  
Adarsh ​​Khatri
la source
comment obtenir la valeur d'attribut créée ici, par exemple, j'ai créé un attribut nommé taille comment récupérer cette valeur
vellai durai
Essayez $product->getSize()ou$product->getData('size')
Adarsh ​​Khatri
Ses valeurs nulles retournées uniquement
vellai durai
Avez-vous ajouté votre attribut personnalisé dans ->addAttributeToSelect? Vous devez dire quoi sélectionner. sinon, utilisez-le à la ->addAttributeToSelect(*)place. Cela sélectionnera tout ce qui concerne le produit. Si cela ne fonctionne pas, vérifiez ma réponse mise à jour sous peu.
Adarsh ​​Khatri
Oui, j'ai ajouté
vellai durai
19

Ça marche pour moi.

$products = Mage::getModel('catalog/product')->getCollection();
foreach ($products as $_product) {
    $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product);
    echo $stock->getQty();
    echo $stock->getMinQty();
    echo $stock->getMinSaleQty();
}
Ajay Patel
la source
6

L'ajout d'informations sur les stocks aux collections de produits peut se faire avec une seule ligne:

/* Mage_Catalog_Model_Resource_Product_Collection */
$products->setFlag('require_stock_items', true);

Ce drapeau est utilisé en catalog_product_collection_load_afterobservateur:

/**
 * Add information about producs stock status to collection
 * Used in for product collection after load
 *
 * @param   Varien_Event_Observer $observer
 * @return  Mage_CatalogInventory_Model_Observer
 */
public function addStockStatusToCollection($observer)
{
    $productCollection = $observer->getEvent()->getCollection();
    if ($productCollection->hasFlag('require_stock_items')) {
        Mage::getModel('cataloginventory/stock')->addItemsToProducts($productCollection);
    } else {
        Mage::getModel('cataloginventory/stock_status')->addStockStatusToProducts($productCollection);
    }
    return $this;
}

Si ce drapeau n'est pas activé, il $product->getStockItem()->getData()a uniquement été is_in_stockactivé. Avec le drapeau, vous pouvez obtenir une quantité, des commandes en souffrance, ... pour chaque produit de la collection

foreach ($products as $product) {
    echo $product->getStockItem()->getQty();
}
sv3n
la source
1

Vous pouvez accéder à la quantité en stock des produits via StockItem comme ceci:

$_product->getStockItem()->getQty();

Testé dans template/catalog/product/view.phtml

Andreas Riedmüller
la source