获取集合查询字符串

时间:2012-02-09 08:00:29

标签: magento

我正在使用以下代码从表中获取一些数据。

    $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但是该集合实际上是按位置字段排序的,我检查过了。

我不明白为什么订单条件在查询中不可见。 谢谢。

3 个答案:

答案 0 :(得分:13)

您的订单未显示的原因是因为在load()方法期间将订单添加到查询中 见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),你会看到包含order by子句的SQL。

答案 1 :(得分: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

希望有所帮助

答案 2 :(得分:1)

您可以尝试使用addAtributeToSort()方法,如下所示:

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

这适用于Magento CE 1.5.1,我希望它适合你。