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,
    );
}
vellai durai
quelle

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();  
Adarsh ​​Khatri
quelle
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();
}
Ajay Patel
quelle
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();
}
sv3n
quelle
1

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

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

Getestet in template/catalog/product/view.phtml

Andreas Riedmüller
quelle