2011-01-26 27 views
12

मैं attribute_id द्वारा संग्रह को सॉर्ट करने का प्रयास कर रहा हूं। मैंने सोचा कि यह आसान होगा, लेकिन मुझे लगता है कि मैं इसे सही ढंग से उपयोग नहीं कर रहा हूँ:Magento में संग्रह को कैसे क्रमबद्ध करें?

$attributes = Mage::getResourceModel('eav/entity_attribute_collection') 
    ->setOrder('attribute_id'); 
echo $attributes->getSelect(); 

परिणाम:

SELECT `main_table`.* FROM `eav_attribute` AS `main_table` 

क्यों वहाँ किसी भी order by नहीं है?

उत्तर

25

आप वास्तव में इसे सही तरीके से कर रहे हैं। हालांकि, चूंकि Magento ईएवी का उपयोग करता है, इसे प्रदर्शन में मदद के लिए चाल लागू करने की आवश्यकता है।

इन चालों में से एक समय अंतिम SQL स्ट्रिंग बनाने के लिए उपयोग किया जाने वाला समय है। आम तौर पर यह आखिरी मिनट में आलसी रूप से लोड होता है और यह तब तक नहीं है जब तक आप वास्तव में इंगित नहीं करते कि आप संग्रह के डेटा तक पहुंचना चाहते हैं, ताकि आप संग्रह का उत्पादन करने के लिए उपयोग किए गए पूर्ण SQL को देख सकें। उदाहरण के लिए अपना कोड चलाना, लेकिन संग्रह को वास्तव में निर्माण और लोड करने के लिए Magento को संकेत देना, अपेक्षित आउटपुट उत्पन्न करता है।

$attributes = Mage::getResourceModel('eav/entity_attribute_collection') 
    ->setOrder('attribute_id'); 
$attributes->count(); // forces the collection to load 
echo $attributes->getSelect()->assemble(); 

यह एसक्यूएल में परिणाम:

SELECT `main_table`.* FROM `eav_attribute` AS `main_table` ORDER BY attribute_id DESC 

तो तुम सही रास्ते पर थे, बस Magento अपने स्तर सबसे अच्छा आप भ्रमित करने के लिए कर रहा था। यह उस पर बहुत अच्छा है।

+0

स्पष्टीकरण के लिए धन्यवाद है! जानना बहुत अच्छा है! :) – powtac

+1

'setOrder()' परिणाम 'desc' क्रम में परिणाम। क्या इसे 'आरोही' बनाने का कोई तरीका है? –

+1

-> setOrder ('attribute_id', 'asc'); –

4

उपयोग इस के बजाय $attributes->getSelect();:

$attributes->getSelect()->order('main_table.attribute_id ASC'); 

क्यों मत पूछो।

+0

Magento 1.4.0.0 पर काम नहीं कर रहा है: अपरिचित विधि 'getSelect()' – frinux

+2

@frinux आपका प्रश्न 'getSelect() ' – powtac

संबंधित मुद्दे