Magento 获取集合查询字符串

Magento 获取集合查询字符串,magento,Magento,我使用以下代码从表中获取一些数据 $collection = Mage::getModel('bannerslider/bannerslider')->getCollection() ->addFieldToFilter('status',1) ->addFieldToFilter('is_home',$this->_display) ->addOrder('position', 'ASC') ; 出

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

    $collection = Mage::getModel('bannerslider/bannerslider')->getCollection()
        ->addFieldToFilter('status',1)
        ->addFieldToFilter('is_home',$this->_display)
    ->addOrder('position', 'ASC')
        ;
出于好奇,我想检查这里执行的查询,我正在使用这段代码进行echo

$collection->printLogQuery(true);

var_dump((string)$collection->getSelect());
现在,我的问题是字符串

SELECT `main_table`.* FROM `bannerslider` AS `main_table` WHERE (status = '1') AND (is_home = '0')
没有显示我的上一个条件addOrder,但集合实际上是按位置字段排序的,我检查了它

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

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

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

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

使用collection尝试以下事项:

$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()方法期间添加到查询中的。
请参阅
Varien\u数据采集\u Db::load()


如果调用
$collection->load(true)
您将看到包含order by子句的SQL。

方法
addAttributeToSort()
仅适用于扩展
Mage\u EAV\u Model\u Entity\u collection\u Abstract的基于EAV的集合。因为问题中的查询引用的属性必须是主表的一部分,所以它很可能不是基于EAV的实体。除了@Vinai所说的,该集合不是EAV实体的一部分。它来自一个有自己表格的模块。
public function load($printQuery = false, $logQuery = false)
{
    // ... removed for brevity

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

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

    // ... removed for brevity
}