因此,我有这个资源模型,该模型从仪表板上的某些管理员代码中提取。它有效,但我似乎无法加入。正在做 ->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 叫做。

您想在这里采取的一般方法是

  1. 创建一个新的资源模型类,该类扩展 Mage_Reports_Model_Resource_Report_Collection_Abstract 班级

  2. 定义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);
许可以下: CC-BY-SA归因
scroll top