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
}