Magento 2: फ़िल्टर उत्पाद संग्रह कई श्रेणियों द्वारा (Magento 2.1)


10

मैं Magento 2.1.0 का उपयोग कर रहा हूं और मुझे वर्तमान में कई श्रेणियों के साथ उत्पाद संग्रह को फ़िल्टर करने में कठिनाई हो रही है। मैंने इसे काम करने के कुछ तरीकों से अधिक उपयोग किया है, लेकिन यह नहीं होगा।

मान लिया जाये कि:

$catalog_ids = [618, 619, 620];
  1. NULL को लौटाता है

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addCategoriesFilter(array('in' => $catalog_ids));
    
  2. रिटर्न अपवाद: अमान्य विशेषता नाम: category_id

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('category_id', array(
            'finset' => $catalog_ids
        ));
    
  3. रिटर्न सिंटेक्स त्रुटि या पहुँच उल्लंघन

    $productCollection = $this->productCollectionFactory->create()
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('category_ids', array(
            'finset' => $catalog_ids
        ));
    

इस काम के लिए मैं कैसे सक्षम हो सकता हूं या इस काम का कोई लिंक है?


उत्पन्न sql की जाँच करने का प्रयास करें। $ productCollection-> getSelectSql (सही);
अर्कादी चिहोवोव

जवाबों:


14

आप शायद $thisMagento 1 से "हर विधि रिटर्न " प्रतिमान के लिए उपयोग किया जाता है । यह अब ऐसा नहीं है (कम से कम हमेशा नहीं)।

विशेष रूप से, addCategoriesFilter()कुछ भी वापस नहीं करता है और इसलिए आपको मिलता है null

कोड को इसमें बदलें:

$productCollection = $this->productCollectionFactory->create();
$productCollection->addAttributeToSelect('*');
$productCollection->addCategoriesFilter(array('in' => $catalog_ids));

3
यह सुझाव देने के लिए कि अब ऐसा नहीं है, शायद बहुत दृढ़ता से कहा गया है। एक ही वर्ग में 'addCategoryFilter' (एकवचन) फ़ंक्शन इस $ लौटाता है; इसलिए 'addCategoriesFilter' में रिटर्न वैल्यू जोड़ना शायद किसी डेवलपर के ध्यान से बच गया है।
पैट्रिक वैन बर्गन

हाँ, यह भी समझ में आता
Fabian Schmengler

2

आपका पहला प्रयास निश्चित रूप से इसे करने का सही तरीका है:

$values = [318, 619, 620];
$conditionType = "in";
$productCollection->addCategoriesFilter([$conditionType => $values]);

अब यह सुनिश्चित करने के लिए दो चीजें हैं: काम करने $productCollectionके Magento\Catalog\Model\ResourceModel\Product\Collectionलिए इसके लिए एक उदाहरण होना चाहिए (या उस वर्ग से जो इसे विस्तारित करता है)।

और जाहिर है कि आपको catalog_category_productउस स्थिति से मेल खाने वाले तालिका में उत्पाद रखने की आवश्यकता है , शायद यह मामला नहीं है और इसलिए आपको NULL मिलता है।


उत्पाद संग्रह या सेवा अनुबंधों का उपयोग करने का कौन सा बेहतर तरीका है? Magento \
कैटगरी

@MagePycho यदि आपके पास विकल्प हमेशा सेवा अनुबंधों के लिए जाना है;)
डिजिटल पियानोवाद पर राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.