magento
संग्रह कैसे फ़िल्टर करें
खोज…
पैरामीटर
पैरामीटर | विवरण |
---|---|
$ addFieldToFilter ( $ क्षेत्र , $ स्थिति = अशक्त) | {string} वह फ़ील्ड जिसे हम फ़िल्टर में जोड़ रहे हैं। |
$ addFieldToFilter ($ क्षेत्र, $ स्थिति = अशक्त ) | {मिश्रित} फ़िल्टर की परिभाषा जिसका हम उपयोग करेंगे। |
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') | {string} वह फ़ील्ड जिसे हम फ़िल्टर में जोड़ रहे हैं। |
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') | {मिश्रित} फ़िल्टर की परिभाषा जिसका हम उपयोग करेंगे। |
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) | {('इनर', 'लेफ्ट')} ईएवी टेबल में शामिल होने पर एसक्यूएल का प्रकार उपयोग में आता है। |
टिप्पणियों
फ़िल्टर तुलना तर्क
Magento तुलनात्मक ऑपरेटरों के साथ-साथ फ़िल्टरिंग का एक लचीला तरीका भी प्रदान करता है। यहाँ मान्य ऑपरेटरों और उनके सिंटैक्स की एक सूची दी गई है:
सभी तुलना तर्कों को addFieldToFielter()
या addAttributeToFilter()
विधियों के दूसरे पैरामीटर में पास किया जा सकता है।
$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
तुलना | तर्क देना | परिणामी SQL स्निपेट |
---|---|---|
बराबर | सरणी ( "eq" => $ वर) | कहां (`my_field` = $ var) |
बराबर नहीं | सरणी ( "neq" => $ वर) | कहां (`my_field`! = $ Var) |
पसंद | सरणी ( "की तरह" => $ वर) | कहाँ (`my_field` पसंद $ var) |
उसके जैसा नहीं | सरणी ( "Nlike" => $ वर) | कहाँ (`my_field` नहीं पसंद $ var) |
है | सरणी (=> $ वर "है") | कहां (`my_field` IS $ var) |
में | सरणी ( "में" => $ वर) | कहां (`my_field` IN ($ var)) |
अंदर नही | सरणी ( "निन" => $ वर) | कहाँ (`my_field` नहीं में ($ var)) |
शून्य | सरणी ( "अशक्त" => true) | कहां (`my_field` IS NULL) |
शून्य नहीं | सरणी ( "notnull" => true) | वहाँ (`my_field` नहीं है) |
से अधिक | सरणी ( "जीटी" => $ वर) | कहां (`my_field`> $ var) |
से कम | सरणी ( "lt" => $ वर) | कहां (`my_field` <$ var) |
से बड़ा या बराबर | सरणी ( "gteq" => $ वर) | कहां (`my_field`> = $ var) |
इससे कम या इसके बराबर | सरणी ( "lteq" => $ वर) | कहां (`my_field` <= $ var) |
सेट में खोजें | सरणी ( "finset" => सरणी ($ वर)) | कहाँ (find_in_set ($ var, `my_field`) |
से और तक | सरणी ("से" => $ var1, "से" => $ var2) | कहां (`my_field`> = $ var1 और` my_field` <= $ var2) |
फ़िल्टरिंग संग्रह
Magento के संग्रह को फ़िल्टर करने के तरीकों का एक शक्तिशाली सेट है। चूंकि दो प्रकार की वस्तुएं हैं जिन्हें संग्रह में समाहित किया जा सकता है, हमें पहले यह निर्धारित करना चाहिए कि हम किस प्रकार के डेटा के साथ काम कर रहे हैं, इससे पहले कि हम इसे फ़िल्टर कर सकें। Magento उत्पादों और श्रेणियों जैसे संस्थाओं के लिए एक EAV डेटा मॉडल लागू करता है। यदि हम ईएवी ऑब्जेक्ट्स के संग्रह को फ़िल्टर कर रहे हैं, तो उपयोग करने के तरीकों का एक अलग सेट है।
Magento में, ऑर्डर EAV ऑब्जेक्ट्स के रूप में संग्रहीत नहीं किए जाते हैं। यह मूल संग्रह को फ़िल्टर करने के लिए ऑर्डर संग्रह को एक अच्छा उदाहरण बनाता है।
$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');
यदि हम उत्पादों के संग्रह को देखते हैं, तो हम देख सकते हैं कि उत्पाद एक ईएवी डेटा मॉडल में संग्रहीत हैं। हम आसानी से EAV विशेषताओं द्वारा भी फ़िल्टर कर सकते हैं।
$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);
हैंडलिंग और फ़िल्टर में ओआरएस
जब हम अपने डेटा की क्वेरी करते हैं, तो हम अक्सर सटीक डेटा सेट प्राप्त करने के लिए एक से अधिक फ़िल्टर की आवश्यकता होती है। SQL में, हम इसे AND और OR क्लॉज़ के साथ हैंडल करते हैं। हम संग्रह के साथ एक ही चीज हासिल कर सकते हैं।
अपनी क्वेरी में AND और क्लॉज़ जोड़ने के लिए, बस दूसरी विधि कॉल जोड़ें। यह दूसरी फिल्टर को मूल WHERE स्टेटमेंट में शामिल करेगा जो इसे AND के साथ जोड़ रहा है।
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku',array('like'=>'a%'))
->addFieldToFilter('sku',array('like'=>'%b'));
परिणामी WHERE क्लॉज इस तरह दिखेगा:
WHERE (e.sku like 'a%') AND (e.sku like '%b')
अब हम कहते हैं कि हम सभी स्कोस चाहते हैं जो 'ए' या 'बी' के साथ समाप्त हों। हम एक OR क्लॉज कैसे जोड़ते हैं? Magento के संग्रह के लिए धन्यवाद, यह बहुत सीधे आगे है। हम फ़िल्टर को फ़िल्टर ऐरे में दूसरे तत्व के रूप में जोड़ते हैं।
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku', array(
array('like'=>'a%'),
array('like'=>'%b')
));
अब, जिसके परिणामस्वरूप खंड इस तरह दिखेगा:
WHERE (((e.sku like 'a%') or (e.sku like '%b')))