我正在使用以下代码从表中获取一些数据。
$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但是该集合实际上是按位置字段排序的,我检查过了。
我不明白为什么订单条件在查询中不可见。 谢谢。
答案 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,我希望它适合你。