लगभग सभी Magento मॉडल में एक संग्रह संग्रह ऑब्जेक्ट होता है जिसे मॉडल के कई उदाहरण प्राप्त करने के लिए उपयोग किया जा सकता है।
एक उत्पाद संग्रह का दृष्टांत लिए, निम्न करें
$collection = Mage::getModel('catalog/product')->getCollection();
उत्पाद एक Magento EAV शैली मॉडल रहे हैं, तो आप किसी भी अतिरिक्त गुण है कि आप वापस करना चाहते पर जोड़ने की आवश्यकता होगी।
$collection = Mage::getModel('catalog/product')->getCollection();
//fetch name and orig_price into data
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
संग्रह पर फ़िल्टर सेट करने के लिए कई वाक्यविन्यास हैं। मैं हमेशा नीचे वर्बोज़ का उपयोग करता हूं, लेकिन आप फ़िल्टरिंग विधियों का उपयोग करने के अतिरिक्त तरीकों के लिए Magento स्रोत का निरीक्षण करना चाह सकते हैं।
निम्नलिखित मानों की एक श्रेणी (बड़ा है और कम से कम) के आधार पर फ़िल्टर करने के लिए कैसे
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products whose orig_price is greater than (gt) 100
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','gt'=>'100'),
));
//AND filter for products whose orig_price is less than (lt) 130
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','lt'=>'130'),
));
यह एक ऐसा नाम है जो एक बात या किसी अन्य के बराबर होती है के आधार पर फ़िल्टर करते हैं पता चलता है।
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
समर्थित कम सशर्त, की एक पूर्ण सूची (आदि लीटर, eq,) lib/Varien/Data/Collection/Db.php
(आधार संग्रह वर्ग अंत में, सभी Magento संग्रह से अधिक दोहराया जा सकता है में _getConditionSql
विधि में पाया जा सकता इटरेटर इंटरफेस पर लागू)। फ़िल्टर सेट होने के बाद आप अपने उत्पादों को कैसे पकड़ लेंगे।
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('name'=>'orig_price','eq'=>'Widget A'),
array('name'=>'orig_price','eq'=>'Widget B'),
));
foreach ($collection as $product) {
//var_dump($product);
var_dump($product->getData());
}
बहुत विस्तृत उत्तर। धन्यवाद! –
विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद। आपने मुझे सही रास्ते के साथ सेट किया है। मैंने आपके उदाहरण कोड से परिणामों का var_dump किया था। क्योंकि जिस विशेषता के साथ मैं काम कर रहा हूं वह एक बहुत ही चुनिंदा आइटम है, मुझे परिणामों में एक संख्यात्मक आईडी मिल रही है, इसलिए टेक्स्ट तुलना काम नहीं कर रही है। E.G.$ this-> संग्रह-> addFieldToFilter (सरणी ( सरणी ('विशेषता' => 'cw_category', 'eq' => 'एरो'), सरणी ('विशेषता' => 'cw_category', 'eq' => 'ट्रैक'), सरणी ('विशेषता' => 'cw_category', 'eq' => 'टूरिंग') ); 'cw_category' => स्ट्रिंग ', 536,535,534' (लंबाई = 12) – Christian
बहुत खुदाई के बिना विशेष रूप से आपकी सहायता नहीं कर सकता है (StackOverflow प्रतिनिधि अच्छा है, लेकिन यह बिल का भुगतान नहीं करता है)। आपके लिए आगे बढ़ने के लिए दो रास्ते। सबसे पहले, जैसा कि बताया गया है, सभी संभावित तुलना ऑपरेटर की सूची के लिए चेकआउट _getConditionSql। आप एक समान खंड या शायद एक इनके साथ प्राप्त करने में सक्षम हो सकते हैं। दूसरा, यदि आप mage_Eav_Model_Entity_Collection_Abstract पर addAttributeToFilter विधि के लिए PHPDoc चेकआउट करते हैं, तो आप देखेंगे कि पहले पैरामीटर के अपेक्षित मानों में से एक Mage_Eav_Model_Entity_Attribute_Interface है। इससे आपको सही रास्ते पर ले जाया जा सकता है। –