题
因此,我有这个资源模型,该模型从仪表板上的某些管理员代码中提取。它有效,但我似乎无法加入。正在做 ->getSelect()->__toString();
什么都没有显示?那不是正常的收藏吗?为什么它不像其他收藏品那样工作?
我的猜测是为了实现我想完成的工作,我将不得不扩展收藏模型,但是我只想看看我是否可以更多地了解这里发生的事情。
$storeId = $this->helper('core')->getStoreId();
$collection = Mage::getResourceModel('sales/report_bestsellers_collection')
->setModel('catalog/product')
->addStoreFilter($storeId);
$collection->getSelect()->join(
array('category_product' => 'catalog_category_product'),
'main_table.product_id = category_product.product_id',
array('category_product.*')
)->where('category_product.category_id = ?', '3')
->order('main_table.qty_ordered DESC')
->limit($limit);
解决方案
报告收集的工作方式与 Mage_Core_Model_Abstract
/crud收藏。 CRUD收集将在实例化时立即分配SQL查询。但是,报告集合在加载操作期间初始化其SQL语句。您可以在 load
用于所有报告集的抽象基类中的方法。
#File: app/code/core/Mage/Reports/Model/Resource/Report/Collection/Abstract.php
public function load($printQuery = false, $logQuery = false)
{
if ($this->isLoaded()) {
return $this;
}
$this->_initSelect();
if ($this->_applyFilters) {
$this->_applyDateRangeFilter();
$this->_applyStoresFilter();
$this->_applyCustomFilter();
}
return parent::load($printQuery, $logQuery);
}
直到 _initSelect
叫做。
您想在这里采取的一般方法是
创建一个新的资源模型类,该类扩展
Mage_Reports_Model_Resource_Report_Collection_Abstract
班级定义a
_applyCustomFilter
班上的方法
然后使用您的新资源模型。您的 _applyCustomFilter
方法看起来像这样。
protected function _applyCustomFilter()
{
$return = parent::_applyCustomFilter();
//manipulate the select all you want here (`$this->getSelect()`)
return $return;
}
其他提示
看来您正在尝试加载“最佳销售”产品的列表(并通过给定类别过滤),过去我使用报告模块中的产品集合来完成此操作。
试一试:
$category = Mage::getModel('catalog/category')->load(3);
$report = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addOrderedQty()
->setOrder('ordered_qty', 'desc')
->addCategoryFilter($category);