2012-02-09 22 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

ご注文が表示されていない理由があるのに役立ちます願っています。あなたはORDER BY句を含むSQLを見ることが$collection->load(true)を呼び出したい場合

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()を参照してください。

+0

あなたの答えに感謝します。私の問題を明らかにする。 – Ovidiu

1

あなたはこのようaddAtributeToSort()メソッドを使用して試みることができる:

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

これは、MagentoのCE 1.5.1上で動作しますが、私はそれがあなたのために願っています。コレクションでの作業

+1

'addAttributeToSort()'メソッドは、 'Mage_Eav_Model_Entity_Collection_Abstract'を拡張したEAVベースのコレクションでのみ利用可能です。この質問のクエリは、メインテーブルの一部でなければならない属性を参照しているため、おそらくEAVベースのエンティティではありません。 – Vinai

+0

速くて効率的なので、助けてくれた! @Vinaiが言ったことに加えて、 – Mateo

+0

は、コレクションがEAVエンティティに含まれていないことを示しています。それはそれ自身のテーブルでモジュールからです。 – 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 

は、注文がload()メソッドの間にクエリに追加されているので

関連する問題