Magentoで製品の在庫数を取得する


12

アイテムの製品在庫量を取得する必要があります。その取得方法

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

回答:


10

数量を取得するには、テーブルに参加する必要があります。

以下のコードを参照してください:

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

ここで作成された属性値を取得する方法たとえば、sizeという名前の属性を作成しました。その値を取得する方法

更新(別のqstで質問する必要がありますが、ここで回答します。)

カスタム属性を取得するには、->addAttributeToSelectセクションに属性を追加する必要があります。

それでも動作しませんか?

製品モデルをロードする必要があるかもしれませんが、コレクションからそれを引き出すときにすべてのカスタム属性がアタッチされるわけではないことがあります(パフォーマンス上の理由によると思います)。何かのようなもの:

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

方法については、ここで作成した属性の値を取得するなど、私どのようにその値フェッチする属性の名前サイズ作成している
vellai durai

試してみる$product->getSize()$product->getData('size')
アダルシュカトリ

その返すヌル値のみ
vellai durai

にカスタム属性を追加しました->addAttributeToSelectか?何を選択するかを伝える必要があります。それ以外の場合は、->addAttributeToSelect(*)代わりに使用します。これにより、製品に関連するすべてが選択されます。これが機能しない場合は、すぐに更新された回答を確認してください。
アダルシュカトリ

はい、追加しました
ヴェライデュライ

18

それは私のために働いています。

$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

製品コレクションへの在庫情報の追加は、1行で実行できます。

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

このフラグはcatalog_product_collection_load_afterオブザーバーで使用されます:

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

このフラグが設定され$product->getStockItem()->getData()ていない場合、設定されているだけis_in_stockです。フラグを使用すると、コレクション内のすべての製品について数量、バックオーダーなどを取得できます

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.