स्टॉक मात्रा द्वारा उत्पाद कैसे प्राप्त करें?


10

मेरे पास निम्नलिखित कोड हैं:

umask(0);
Mage::app();
$category =new Mage_Catalog_Model_Category();
$category->load($cid);

if ($status == "2") {
    $products = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('*') 
    ->addFieldToFilter('status',Mage_Catalog_Model_Product_Status::STATUS_DISABLED);
    $products->load();
}

if ($status == "1") {
    $products = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('*');
    $products->load();  
}

मैं उत्पादों को फ़िल्टर करने के लिए स्टॉक मात्रा का एक फिल्टर जोड़ना चाहता हूं, मैंने कोशिश की:

    $products = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect('*');
    **->addAttributeToFilter('qty', array("gt" => 0));**

लेकिन रसीला नहीं, कोई विचार?

जवाबों:


30

किसी उत्पाद के लिए स्टॉक मात्रा प्राप्त करने के लिए आपको कैटलिनवेंट्री / स्टॉक_इटेम तालिका के साथ जुड़ना होगा , आप यह कर सकते हैं:

$collection = Mage::getModel('catalog/product')
     ->getCollection()
     ->addAttributeToSelect('*')
     ->joinField('qty',
         'cataloginventory/stock_item',
         'qty',
         'product_id=entity_id',
         '{{table}}.stock_id=1',
         'left'
     )->addAttributeToFilter('qty', array('gt' => 0));

इस पंक्ति '{{टेबल}}} का क्या अर्थ है। stock_id = 1'?
hkguile

1
संक्षेप में इसका मतलब है कि आप डिफ़ॉल्ट स्टॉक आइटम से मात्रा लोड कर रहे हैं। {{तालिका}} इस संदर्भ में कैटलॉगवेंट्री_स्टॉक_इटेम टेबल का अनुवाद करता है और स्टॉक_ड = 1 इंगित करता है कि यह डिफ़ॉल्ट स्टॉक आइटम है।
डैनी देव Nz

1
मैं कर रहा हूँ $coll = Mage::getResourceModel('catalog/product_collection')और अपने क्षेत्र में शामिल होने का उपयोग करने और addAttributeToFilter। संग्रह ठीक लोड हो रहा है। लेकिन फ़िल्टर काम नहीं कर रहा है ->addAttributeToFilter('qty', array("gt" => 0)):। देखते हुए $coll->getSelect(), खंड qtyमें कोई संदर्भ नहीं है WHERE। कोई विचार क्यों?
बटल बुटकस

Hi @vladimir साबुन
एपिस

6

एक रास्ता:

$stockIds = Mage::getModel('cataloginventory/stock_item')
    ->getCollection()
    ->addQtyFilter('=', 30) //can be ->addQtyFilter('>=', 30), depending on requirement
    ->getAllIds();

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addIdFilter($stockIds)
    ->setPageSize(10);

दूसरे दिन:

$oCollection = Mage::getModel('catalog/product')
->getCollection()
->joinField(
    'qty',
    'cataloginventory/stock_item',
    'qty',
    'product_id=entity_id',
    '{{table}}.stock_id=1',
    'left'
)
->addAttributeToFilter('qty', array('eq' => 30));

3

@ FIRBI इन्फोटेक के उत्तर में 'FIRST WAY' काम नहीं करेगा, क्योंकि यह ->getAllIds()विधि उत्पाद आईडी नहीं, स्टॉक आईडी लौटाती है। इसके बजाय आपको इसे जोड़ने की आवश्यकता है;

$stockIds = Mage::getModel('cataloginventory/stock_item')
->getCollection()
->addQtyFilter('>=', 30); 
//->getAllIds();

foreach($stockIds as $stock) {
   $idarray[] = $stock->getProductId();
}

$products = Mage::getModel('catalog/product')
->getCollection()
->addIdFilter($idarray)
->setPageSize(10);

यह तर्क बहुत स्पष्ट, सरल है, जिसमें कोई जादू नहीं है। मुझे आश्चर्य है कि कितना कुशल / धीमा / तेज है $stock->getProductId()?
04:०

2

सबसे सुंदर तरीका:

$products = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('*');
Mage::getSingleton('cataloginventory/stock')
    ->addInStockFilterToCollection($products);

1

देर से आने वाले उत्तर, हालांकि इस कोड पर कुछ काम करने की आवश्यकता थी, इसलिए यहां आप जाएं। यह केवल कुछ जोड़ लेता है, विन्यास और सरल उत्पादों के लिए काम करता है, बंडलों के खिलाफ परीक्षण नहीं किया है।

$product_collection->getSelect()->joinLeft(
        array(
            'css1' => $products->getTable('cataloginventory/stock_status')
        ),
        'e.entity_id = css1.product_id and css1.stock_id =1 AND css1.website_id='.Mage::app()->getWebsite()->getId(),
        ''
    )->joinLeft(
        array(
            'cpsl' => $products->getTable('catalog/product_super_link')
        ),
        'cpsl.parent_id = e.entity_id',
        ''
    )->joinLeft(
        array(
            'css2' => $products->getTable('cataloginventory/stock_status')
        ),
        'css2.product_id = cpsl.product_id and css1.stock_id =1 AND css1.website_id='.Mage::app()->getWebsite()->getId(),
        ''
    )->joinLeft(
        array(
            'cpei' => 'catalog_product_entity_int'
        ),
        "cpei.entity_id = cpsl.product_id AND cpei.entity_type_id = $entity_type_id and cpei.attribute_id = $attribute_id AND (cpei.value IS NULL OR cpei.value = " . Mage_Catalog_Model_Product_Status::STATUS_ENABLED . ")",
        ''
    )->group(
        'e.entity_id'
    )->columns(
        array(
            'qty' => new Zend_Db_Expr ("IF(`e`.`type_id` = 'simple', `css1`.qty, sum(css2.qty))")
        )
    )->having(
        'qty > 0'
);

मैं आज एक धीमा दिन बिता रहा हूं ... क्या यह $ उत्पाद है = दाना :: getModel ('कोर / संसाधन'); और $ product_collection = Mage :: getModel ('कैटलॉग / उत्पाद') -> getCollection ();
योगिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.