2009-11-20 9 views
10

Magento संग्रह विधि का उपयोग करते समय addFieldToFilter क्या नल मानों द्वारा फ़िल्टरिंग की अनुमति देना संभव है? मैं उस संग्रह में सभी उत्पादों का चयन करना चाहता हूं जिनके पास कस्टम विशेषता है, भले ही विशेषता को कोई मान निर्दिष्ट नहीं किया गया हो।Magento addFieldToFilter NULLs

उत्तर

1

आपको addFieldToFilter का उपयोग करने की आवश्यकता नहीं है।

अब समाधान:
विशेषताओं का नाम Magento में code के रूप में जाना जाता है, तो आप सिर्फ नीचे दिए गए कोड का उपयोग करने के उत्पादों जो एक सरणी

 

$prodsArray=Mage::getModel('catalog/product')->getCollection() 
            ->addAttributeToFilter('custom_attribute_code') 
            ->getItems(); 
 
रूप में एक विशिष्ट विशेषता के सभी प्राप्त करने की आवश्यकता

आप addAttributeToFilter के दूसरे पैरामीटर में addAttributeToFilter में विशेषता के मान के लिए कुछ शर्तों को भी निर्दिष्ट कर सकते हैं।

आप इस फ़ाइल में इस विधि (आगे के अध्ययन के लिए) पा सकते हैं:

app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php 
+0

addFieldToFilter ओर इशारा करते हुए के लिए धन्यवाद - यह निपटने शून्य छी के समाधान के लिए नेतृत्व किया एलडीएस – leepowers

+0

यह वास्तव में गलत है, यह एक "खाली" फ़िल्टरिंग के बजाय खाली '' के साथ तुलना करेगा। – useless

18

अशक्त/खाली विशेषताओं द्वारा एक उत्पाद का संग्रह फ़िल्टर करना दो संभव समाधान है। Magento फ़िल्टर करने के लिए गुणों के मूल्यों को पकड़ने के लिए एक INNER जॉइन का उपयोग करता है। लेकिन यदि उत्पाद विशेषता को मान निर्दिष्ट नहीं किया जाता है तो शामिल होने में विफलता विफल हो जाएगी, क्योंकि डेटाबेस तालिका/संबंध गुम है।

समाधान # 1: उपयोग addAttributeToFilter() और से "आंतरिक" (डिफ़ॉल्ट) प्रकार में शामिल होने को बदलने "छोड़" करने के लिए:

$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToFilter('custom_attribute', array(... condition options ..), 'left'); 

समाधान # 2: सुनिश्चित करें कि आपके कस्टम विशेषता बनाओ एक डिफ़ॉल्ट मान है। Magento इस संबंध में रूढ़िवादी है। Magento केवल विशेषता और उत्पाद के बीच संबंध बनाएगा यदि विशेषता के लिए कोई मान दिया गया हो। इसलिए उपयोगकर्ता द्वारा निर्दिष्ट मान या डिफ़ॉल्ट मान की अनुपस्थिति में विशेषता उत्पाद फ़िल्टर करने के लिए पहुंच योग्य नहीं होगी, भले ही विशेषता व्यवस्थापक पैनल के अंतर्गत उत्पाद विवरण दृश्य में दिखाई दे।

+3

बाएं शामिल रणनीति महान काम किया। ऐसा लगता है कि यह जवाब काफी पुराना है, लेकिन मुझे वैसे भी धन्यवाद कहना होगा! – shaune

+1

विशेषता को पकड़ते समय बाएं जुड़ना जरूरी है, आईएमओ। – Nick

49

मैं देख रहा हूँ आप पहले से ही एक समाधान मिल गया, लेकिन वहाँ भी इस विकल्प है:

$collection->addFieldToFilter('parent_item_id', array('null' => true)); 

लेकिन जो काम नहीं करता है तो आप "शून्य" => झूठी, उपयोग करना चाहते हैं। (और मैंने देखा है कि आप इस तरह के "में", "nin", "eq", "neq", "जीटी" के रूप में तत्वों का उपयोग कर सकते हैं), तो आप ऐसा कर सकते हैं:

$collection->addFieldToFilter('parent_item_id', array('neq' => 'NULL')); 

आशा यह अभी भी उपयोगी है। ..

+4

Varien_Data_Collection_Db :: _ getConditionSql() के कोड में दस्तावेज़ देखें। यह उन सभी विकल्पों का वर्णन करता है जो संभव है, जैसा कि उल्लिखित 'शून्य' है, बल्कि रिवर्स के लिए 'नोटन' भी है। – fietserwin

20

यह नहीं NULL फिल्टर

$collection->addFieldToFilter('parent_item_id', array('notnull' => true)); 
1

लिए काम करता है क्योंकि सवाल बिल्कुल प्रश्न के शीर्षक से मेल नहीं खाता है और मैं की तरह एक शर्त है की खोज करके उन्हें कई बार पाया: विशेष मूल्य या शून्य

आप एक संग्रह एक मूल्य या नल मिलान फ़िल्टर करना चाहते हैं, तो आप उपयोग कर सकते हैं:

$collection->addFieldToFilter('<attribute>', array(
    array('eq' => '<value>'), 
    array('null' => true) 
));