कारण ColinM का जवाब काम करता है में कोड की वजह से है app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php
की addAttributeToFilter
विधि। यदि आप इस सरणी प्रारूप का उपयोग करते हैं, तो यह कॉल नहीं करता है addAttributeToSelect
। फ्लैट मोड में, addAttributeToSelect
चुपचाप विफल रहता है यदि विशेषता फ्लैट टेबल में नहीं है।
(नीचे /programming/6271284/can-i-add-other-attributes-to-magentos-flat-product-catalog-table-17021620 पर मेरे उत्तर की पुनः हैश है। - मैं हूँ यकीन नहीं है कि शिष्टाचार उसके लिए क्या है, लेकिन मुझे पता है कि मुझे यह मददगार लगा होगा)
मैं फ्लैट-मोड संग्रह के लिए "साफ" समाधान चाहता था और गैर-फ्लैट विशेषताओं पर चयन कर रहा था, जो:
- व्यवस्थापक में विशिष्ट सेटिंग रखने के लिए विशेषता की आवश्यकता नहीं होती है (इसे उपयोगकर्ता द्वारा जोड़ा जा सकता है, या सामने के छोर पर छिपाया जा सकता है)
- दोनों फ्लैट और गैर-फ्लैट मोड के लिए काम करता है
मैंने संबंधित उत्पाद संग्रह का उपयोग किया, लेकिन यह किसी भी ईएवी संग्रह पर लागू होता है।
असफल कोड:
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToSelect( 'my_custom_attribute' )
->addAttributeToFilter( 'my_custom_attribute', 3 )
;
फ्लैट मोड में, उपरोक्त कोड चुपचाप उस विशेषता का चयन करने या फ़िल्टर करने में विफल रहता है, यदि ऐसा नहीं होता है कि यह फ्लैट टेबल में नहीं है।
चयन में जोड़ना:
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->joinAttribute( 'my_custom_attribute', 'catalog_product/my_custom_attribute', 'entity_id', null, 'left' )
->addAttributeToSelect( 'my_custom_attribute' )
;
joinAttribute
विधि एक विशिष्ट विशेषता अनुरोध किया के लिए क्वेरी के लिए शामिल होने के कहते हैं। यह तब भी काम करता है जब विशेषता पहले से ही सपाट तालिका में है, लेकिन सपाट तालिका का उपयोग करके विशुद्ध रूप से थोड़ा कम कुशल होगा।
मैंने left
यह सुनिश्चित करने के लिए कि उसमें my_custom_attribute
उन उत्पादों को लाने के लिए एक ज्वाइन का उपयोग किया है , अगर यह उन उत्पादों को प्राप्त करता है। इसे बदलें inner
यदि आप केवल पंक्तियों में रुचि रखते हैं जहाँ my_custom_attribute
सेट किया गया है।
फ़िल्टर में जोड़ना (ऊपर कॉलिनम के अनुसार):
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToFilter( array( array( 'attribute' => 'my_custom_attribute', 'eq' => 3 ) ) )
;
उपरोक्त कोड इसे आपके फ़िल्टर का पालन करने के साथ ही चयन में जोड़ देगा।
(सीई 1.6.2.0 में परीक्षण किया गया)
non-flat attribute
? धन्यवाद। और मैजेंटो को भ्रमित मत करो। यह पहले से ही भ्रमित है