如何过滤magento废弃的购物车报告集合

时间:2017-01-17 14:30:52

标签: php magento

我正在使用此代码获取所有废弃的购物车。

$storeIds = array(1);
    $collection = Mage::getResourceModel('reports/quote_collection');
    $collection->prepareForAbandonedReport($storeIds);
    $collection->load();

我想要的是,为了让购物车不超过某个特定日期,我也尝试过以下代码来实现它,但它不起作用。

$collection->addFieldToFilter(array("main_table.created_at"=>Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('-1 week'))));

另外一件事我怎么能addAttributeToselect()来获取所需的数据,而不是全部。如果有人也可以提供其他一些过滤器示例的答案,那将非常感激。谢谢提前

3 个答案:

答案 0 :(得分:1)

所以经过很多搜索后我终于找到了办法。函数prepareForAbandonedReport()正在执行所有过滤步骤,因此我打开包含此函数的文件,复制其代码并在我的代码中使用它并根据我的需要对其进行更改。这是我使用的代码,我希望这会对某人有所帮助。

        $collection = Mage::getResourceModel('reports/quote_collection')
        ->addFieldToFilter('items_count', array('neq' => '0'))
        ->addFieldToFilter('main_table.is_active', '1')
        ->addFieldToFilter('main_table.created_at', array('gt' => date("Y-m-d H:i:s", strtotime('-2 month'))))
        ->addSubtotal($storeIds, null)
        ->addCustomerData(null)
        ->setOrder('updated_at')
        ->addFieldToFilter('store_id', array('in' => $storeIds));
    $collection->load();

答案 1 :(得分:0)

请使用以下代码,这可能有所帮助 -

$collection = Mage::getResourceModel('reports/quote_collection');
$collection->prepareForAbandonedReport();
$output = $collection->load()->toArray();

答案 2 :(得分:0)

由于此答案对我有很大帮助,因此我将分享我自己的解决方案(在Magento EE 1.13.1.0中进行了测试):

  1. 覆盖Mage_Reports_Model_Resource_Quote_Collection
  2. 创建_filterDate()方法:

    public function _filterDate($key, $filter) 
    {
        if (array_key_exists($key, $filter)) {
            $filterDate = $filter[$key];
            if (array_key_exists('from', $filterDate)) {
                $fromRawDate    = $filter[$key]['from'];
                $dateFrom       = str_replace('/', '-', $fromRawDate);
                $dateStart      = date('Y-m-d', strtotime($dateFrom)) . ' 00:00:00';
            }
            if (array_key_exists('to', $filterDate)) {
                $toRawDate      = $filter[$key]['to'];
                $dateTo         = str_replace('/', '-', $toRawDate);
                $dateEnd        = date('Y-m-d', strtotime($dateTo)) . ' 23:59:59';
            }
    
            if ( ! empty($dateStart) && ! empty($dateEnd) ) {
                $this->addFieldToFilter('`main_table`.`' . $key . '`', array('from' => $dateStart, 'to' => $dateEnd));
            } else if ( ! empty($dateStart) && empty($dateEnd) ) {
                $this->addFieldToFilter('`main_table`.`' . $key . '`', array('from' => $dateStart));
            } else if ( ! empty($dateEnd) && empty($dateStart) ) {
                $this->addFieldToFilter('`main_table`.`' . $key . '`', array('to' => $dateEnd));
            }
        }
    }
    
  3. 编辑prepareForAbandonedReport()并使用_filterDate()

    public function prepareForAbandonedReport($storeIds, $filter = null)
    {
        self::_filterDate('created_at', $filter); // Used to filter created_at field
        self::_filterDate('updated_at', $filter); // Used to filter updated_at field
    
        $this->addFieldToFilter('items_count', array('neq' => '0'))
            ->addFieldToFilter('main_table.is_active', '1')
            ->addSubtotal($storeIds, $filter)
            ->addCustomerData($filter)
            ->setOrder('updated_at');
    
        if (is_array($storeIds) && !empty($storeIds)) {
            $this->addFieldToFilter('store_id', array('in' => $storeIds));
        }
    
        return $this;
    }