কীভাবে স্টক পরিমাণে পণ্য পাবেন?


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। স্টক_আইডি = 1'?
hkguile

1
সংক্ষেপে এর অর্থ আপনি ডিফল্ট স্টক আইটেম থেকে কিটিটি লোড করছেন। context {টেবিল} this এই প্রসঙ্গে ক্যাটালগের তালিকাভুক্তি_স্টক_সেটেম টেবিল এবং স্টক_আইডি = 1 এ অনুবাদ করে যে এটি ডিফল্ট স্টক আইটেম।
ড্যানি দেব এনজেড

1
আমি $coll = Mage::getResourceModel('catalog/product_collection')আপনার যোগদানের ক্ষেত্রটি করছি এবং ব্যবহার করছি addAttributeToFilter। সংগ্রহটি ঠিক জরিমানা করছে। কিন্তু ফিল্টার কাজ করছে না: ->addAttributeToFilter('qty', array("gt" => 0))। এ খুঁজছি $coll->getSelect(), সেখানে কোন রেফারেন্স qtyমধ্যে WHEREদফা। কোন ধারণা কেন?
বাটল বাটকাস

হাই @ ভ্লাদিমির কীভাবে উপরের কোডটি সাবান এপিসে পাস করবেন
শিবাশঙ্কর এম

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

@ টিবিআই ইনফোটেকের উত্তরটির 'প্রথম উপায়' ->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()?
আহ্নবিজক্যাড 26'17

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'
);

আমার আজ একটি মন্থর দিন কাটছে ... এটি কি $ পণ্যগুলি = মাইজ :: গেটমোডেল ('কোর / রিসোর্স'); এবং $ product_collection = Mage :: getModel ('ক্যাটালগ / পণ্য') -> গেট সংগ্রহ ();
এফ্লিংিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.