2012-02-09 14 views
5

Bazı verileri bir tablodan almak için aşağıdaki kodu kullanıyorum.Koleksiyon sorgu dizesini al

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

Sadece benim merak için, buraya yürütülür sorgu kontrol etmek istiyorum ve ben şimdi bu kodu

$collection->printLogQuery(true); 

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

kullanarak yankı ediyorum, benim sorunum dize

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

son koşulu, addOrder göstermiyor ama koleksiyon gerçekten konum alanı tarafından sipariş, ben bunu kontrol ettim.

Neyi anlamadığım, sipariş koşullarının neden sorguda görünmediğidir. Teşekkürler. Böyle addAtributeToSort() yöntemi kullanarak deneyebilirsiniz

cevap

13

Sipariş gösterilmemesinin sebebi yardımcı olur. Eğer maddesi ile sipariş içeren SQL görecekti $collection->load(true) çağırır Eğer

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

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

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

    // ... removed for brevity 
} 

Varien_Data_Collection_Db::load() bakınız.

+0

Cevabınız için teşekkür ederiz. Bu benim sorunumu açıklığa kavuşturuyor. – Ovidiu

1

: Bu Magento CE 1.5.1 üzerinde çalışır

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

, ben sizin için umuyoruz. koleksiyonu ile çalışma

+1

'addAttributeToSort()' yöntemi, yalnızca 'Mage_Eav_Model_Entity_Collection_Abstract' uzantısını kullanan EAV tabanlı koleksiyonlarda kullanılabilir. Sorudaki sorgu, ana tablonun bir parçası olması gereken niteliklere atıfta bulunduğundan, büyük olasılıkla EAV tabanlı bir varlık değildir. – Vinai

+0

Hızlı ve verimli, teşekkürler yardımcı oldu! @Vinai'nin söylediklerine ek olarak – Mateo

+0

, bu Koleksiyon EAV varlığına dahil değildir. Kendi masasına sahip bir modülden. – Ovidiu

4

sonraki şeyler denemek:

$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 

o emir load() yöntemine sırasında sorguya eklenir çünkü