2012-02-09 17 views
5

मैं तालिका से कुछ डेटा प्राप्त करने के लिए निम्न कोड का उपयोग कर रहा हूं।संग्रह क्वेरी स्ट्रिंग प्राप्त करें

$collection = Mage::getModel('bannerslider/bannerslider')->getCollection() 
     ->addFieldToFilter('status',1) 
     ->addFieldToFilter('is_home',$this->_display) 
    ->addOrder('position', 'ASC') 
     ; 

बस मेरी जिज्ञासा के लिए, मैं क्वेरी कि यहाँ निष्पादित किया जाता है जाँच करना चाहते हैं और मैं अब इस कोड

$collection->printLogQuery(true); 

var_dump((string)$collection->getSelect()); 

का उपयोग कर गूंज रहा हूँ, मेरी समस्या यह है कि स्ट्रिंग

SELECT `main_table`.* FROM `bannerslider` AS `main_table` WHERE (status = '1') AND (is_home = '0') 

मेरी आखिरी स्थिति नहीं दिखा रहा है, addOrder लेकिन संग्रह वास्तव में स्थिति फ़ील्ड द्वारा आदेश दिया गया है, मैंने इसे चेक किया है।

मुझे क्या समझ में नहीं आता है कि क्वेरी में ऑर्डर स्थिति क्यों दिखाई नहीं दे रही है। धन्यवाद।

उत्तर

13

कारण अपने आदेश नहीं दिखा रहा है, क्योंकि आदेश विधि लोड() के दौरान प्रश्न में जोड़ा जाता है।
Varien_Data_Collection_Db::load()

public function load($printQuery = false, $logQuery = false) 
{ 
    // ... removed for brevity 

    $this->_renderFilters() 
     ->_renderOrders() 
     ->_renderLimit(); 

    $this->printLogQuery($printQuery, $logQuery); 
    $data = $this->getData(); 

    // ... removed for brevity 
} 

देखें आप $collection->load(true) कहेंगे तो आप खंड द्वारा आदेश युक्त एसक्यूएल देखना होगा।

+0

आपके उत्तर के लिए धन्यवाद। जो मेरी समस्या को स्पष्ट करता है। – Ovidiu

1

आप इस तरह addAtributeToSort() पद्धति का उपयोग करके की कोशिश कर सकते:

$collection = Mage::getModel('bannerslider/bannerslider')->getCollection() 
    ->addFieldToFilter('status',1) 
    ->addFieldToFilter('is_home',$this->_display) 
    ->addAtributeToSort('position', 'ASC'); 

इस Magento सीई 1.5.1 पर काम करता है, मुझे आशा है कि यह आप के लिए किया जाएगा।

+1

विधि 'addAttributeToSort() 'केवल' Mage_Eav_Model_Entity_Collection_Abstract' को विस्तारित ईएवी आधारित संग्रह पर उपलब्ध है। चूंकि प्रश्न में क्वेरी विशेषताओं का जिक्र कर रही है जो मुख्य तालिका का हिस्सा होना चाहिए, यह शायद ईएवी आधारित इकाई नहीं है। – Vinai

+0

तेज़ और कुशल, धन्यवाद इससे मदद मिली! – Mateo

+0

@ विनाई के अलावा, यह संग्रह ईएवी इकाई पर हिस्सा नहीं है। यह एक मॉड्यूल से इसकी अपनी तालिका के साथ है। – Ovidiu

4

संग्रह के साथ कार्य करना अगले बातें कोशिश:

$collection->setOrder('position', 'ASC'); // main order setter 
$collectioon->getSelect()->order('position asc'); // alternative order setter 

$collection->load(); // some times you need to call load() to be sure your collection don't get changes later in some place 
echo $collection->getSelect(); // to print query 

आशा है कि यह मदद करता है

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