उत्पाद सूची विशेषता फ़िल्टर क्वेरी


12

मैंने _getProductCollection() कक्षा की विधि में एक फ़िल्टर Mage_Catalog_Block_Product_List इस प्रकार जोड़ा है।

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection->getSelect()->joinInner(
        array('cpe' => 'catalog_product_entity'),
        'e.entity_id = cpe.entity_id'
    ) 
    ->where("cpe.type_id = 'simple'"); 
    ...
}

उपरोक्त कोड Magento संस्करण 1.7 के रूप में ठीक काम कर रहा है। लेकिन जब भी मैं निम्नलिखित कोड लिखता हूं, यह देता है

कॉलम नहीं मिला: 1054 अज्ञात कॉलम 'e.type_id' में 'जहाँ खंड'

त्रुटि।

कोड (जो काम नहीं कर रहा है)।

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
        ->addAttributeToSelect('type_id')
        ->addAttributeToFilter('type_id','simple');
    ...
}

अब प्रश्न

  1. यदि मैं पहले काम करने वाले कोड का उपयोग करता हूं तो क्या कोई प्रदर्शन प्रभाव पड़ेगा?
  2. क्या कोई अन्य तरीका है जिससे उचित उत्पाद फ़िल्टर हो सके?

अपडेट करें:

जब भी मैं निम्नलिखित कोड लागू करता हूं और rwdथीम का उपयोग करता हूं, तो मुझे कोई त्रुटि नहीं मिल रही है। लेकिन जब भी मैं यूजर defaultथीम देता हूं, मुझे नीचे की त्रुटि मिलती है,

कोड

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
         ->addAttributeToSelect('type_id')
         ->addAttributeToFilter('type_id','simple');
    ...
}

त्रुटि

SQLSTATE [42S22]: कॉलम नहीं मिला: 1054 अज्ञात स्तंभ 'e.type_id' में 'जहां खंड', क्वेरी था: चयन मंजिल ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 के रूप में range, COUNT (*) के रूप में countसे catalog_product_index_priceके रूप में e अंदरूनी शामिल हों catalog_category_product_indexके रूप में cat_indexपर cat_index.product_id = e.entity_id और cat_index.store_id = 1 और cat_index.visibility (2, 4) और cat_index.category_id = '3' कहां ( etype_idमें ( 'सरल' )) और (e.website_id = '1') और (e.customer_group_id = 0) और (e.min_price IS NULL) ग्रुप द्वारा FLOOR ((ROUND (e.min.price) * 1, 2) / 10) + 1 कक्षा द्वारा फर्श ((ध्वनि (e.min_price) * 1, 2)) / 10) + 1 ASC


जो Magento संस्करण यू का उपयोग किया है ?? * & Magento पैच आवेदन किया है
अमित बेरा

1
WTF? अब समझ में आता है ... मैं RWD पर एक EE 1.14 से अधिक कोशिश कर रहा था, यह सिर्फ अस्वीकार्य है, कैसे एक दृश्य विषय पूरी क्वेरी को सबसे खराब तरीके से बदल सकता है, मुख्य तालिका को कैसे बदल सकता है ... यह कुछ भी नहीं है, लेकिन बग नहीं हो सकता । अच्छी तरह से @Magento शिक्षार्थी!
मौरोनिग्रेले

वास्तव में, दृश्य विषय समस्या पैदा करता है। धन्यवाद। कोड एक विषय से स्वतंत्र होना चाहिए
मैगेंटो लर्नर

जवाबों:


0

मुझे लगता है कि:

$collection->addAttributeToFilter('type_id', array('eq' => 'simple');

काम करना चाहिए, आपको जोड़ने की आवश्यकता नहीं type_idहै selectक्योंकि यह एक catalog_product_entityकॉलम है और इसे डिफ़ॉल्ट रूप से पुनर्प्राप्त किया जाता है। मैं हमेशा अंतिम क्वेरी को लॉग इन करने का सुझाव देता हूं ताकि यह हो सके कि सबसे अच्छा विचार क्या हो:

Mage.:log($collection->getSelectSql(true));

BTW: पहले कोड ब्लॉक का कोई मतलब नहीं है क्योंकि आप मुख्य टेबल ( catalog_product_entity) से खुद को जोड़ रहे हैं।


"मैगेंटो 1.7 में उन्होंने कीमत को छानने के विकल्प के लिए उपयोग किए जाने वाले चुनिंदा sql पर एक अनुकूलन किया। वे FROM sql भाग को हटाते हैं (जो उत्पाद इकाई है - जिसमें type_id विशेषता है) और price_index संबंधित तालिका को मुख्य एक बनाते हैं - एक यह क्वेरी के FROM भाग में उपयोग किया जाता है। इसलिए मूल रूप से जिस तालिका से डेटा चुना गया है वह उत्पाद इकाई तालिका नहीं है (आप सभी उत्पाद आधार विशेषताएँ खो देते हैं) मुख्य तालिका उत्पाद सूचकांक बन जाती है। यह एक मुख्य अद्यतन है। Magento की टीम ने 1.7 संस्करण शुरू किए। " निम्न का संदर्भ लें
Magento Learner


1
मेरी गलती लोक को लुभाने के लिए, किसी कारण से, मैं बैकेंड ब्लॉक getCollection विधि में सोच रहा था, इसलिए इस परिदृश्य में आपका पहला कोड ठीक है मुझे यकीन नहीं है कि यह सबसे अच्छा समाधान है लेकिन ठीक लगता है। क्षमा करें
MauroNigrele

@MagentoLearner क्या आप उस पोस्ट के बारे में निश्चित हैं? मैंने अभी EE1.14 पर पुन: जाँच की है जो मैंने अभी भी कैटलॉग_प्रोडक्ट_एंटिटी का उपयोग मुख्य तालिका के रूप में किया है, सिवाय इसके कि जब आप फ्लैट कैटलॉग (बिल्कुल अनुशंसित) का उपयोग करने के लिए सेट हों, लेकिन दोनों ही मामलों में आपके पास select_id मौजूद है। जैसा कि मैंने मूल उत्तर में लिखा है क्या आप क्वेरी लॉग इन कर सकते हैं?
मौरोनिग्रेले

1
mmmm दिलचस्प ... मैं भी खोज मामले में क्वेरी की जाँच करता हूं और मुख्य तालिका के रूप में कैटलॉग_प्रोडक्ट_एंटिटी का उपयोग कर रहा हूं, हो सकता है कि "मैगेंटो टीम" ने बदलावों को रोलबैक करने का फैसला किया हो। मुझे इसकी जांच करने के लिए कोई 1.7 स्थापित नहीं मिला, लेकिन एक इकाई की मुख्य तालिका को बदलने का विचार एक बहुत ही खराब वास्तुशिल्प निर्णय की तरह लगता है ... अच्छी तरह से ध्यान दें कि आपने अभी मेरा सप्ताहांत बर्बाद कर दिया है, अब मुझे सीई 1 खोजने और स्थापित करने की आवश्यकता है .7 और इस बकवास को अपनी आँखों से देखो ... मेरी पत्नी इस से खुश नहीं होगी :)
मौरोनिग्रेले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.