Erhalten Sie die Lagermenge des Produkts in Magento


12

Ich muss die Lagerbestandsmenge für den Artikel abrufen, wie bekomme ich das?

$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,
    );
}

Antworten:


10

Sie müssen sich der Tabelle anschließen, um die Menge zu erhalten.

Siehe folgenden 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(),
    );
}

Wie man hier einen Attributwert erstellt, zB habe ich ein Attribut namens size erstellt, um diesen Wert abzurufen

UPDATE (Du solltest zwar in einer anderen QST nachfragen, aber ich werde hier für dich antworten.)

Um ein benutzerdefiniertes Attribut zu erhalten, müssen Sie das Attribut im ->addAttributeToSelectAbschnitt hinzufügen .

Funktioniert immer noch nicht

Möglicherweise müssen Sie ein Produktmodell laden, da ich gelegentlich festgestellt habe, dass nicht alle benutzerdefinierten Attribute angehängt sind, wenn Sie es aus einer Sammlung entfernen (dies ist vermutlich aus Gründen der Leistung gedacht). Etwas wie:

$_product = Mage::getModel('catalog/product')->load($product->getId());
$size = $_product->getSize();  

wie man hier einen Attributwert erzeugt, zum Beispiel habe ich ein Attribut namens size erzeugt, um diesen Wert zu erhalten
vellai durai

Versuchen Sie $product->getSize()oder$product->getData('size')
Adarsh ​​Khatri

Es werden nur
Nullwerte zurückgegeben

Haben Sie Ihr benutzerdefiniertes Attribut hinzugefügt ->addAttributeToSelect? Sie müssen angeben, was Sie auswählen möchten. ansonsten einfach ->addAttributeToSelect(*)stattdessen verwenden. Dies wählt alles aus, was mit dem Produkt zu tun hat. Wenn dies nicht funktioniert, überprüfen Sie in Kürze meine aktualisierte Antwort.
Adarsh ​​Khatri

Ja, ich habe hinzugefügt
Vellai Durai

18

Es funktioniert für mich.

$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();
}

6

Das Hinzufügen von Bestandsinformationen zu Produktkollektionen kann über eine einzelne Zeile erfolgen:

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

Diese Flagge wird im catalog_product_collection_load_afterBeobachter verwendet:

/**
 * 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;
}

Wenn dieses Flag nicht gesetzt $product->getStockItem()->getData()ist, wurde nur is_in_stockgesetzt. Mit flag erhalten Sie Mengen, Rückstände, ... für jedes Produkt in der Kollektion

foreach ($products as $product) {
    echo $product->getStockItem()->getQty();
}

1

Sie können über StockItem wie folgt auf die Lagerbestandsmenge zugreifen:

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

Getestet in template/catalog/product/view.phtml

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.