【问题标题】:Magento Get SUM of order totals between set datesMagento 获取设定日期之间订单总额的总和
【发布时间】:2012-08-09 16:02:15
【问题描述】:

我可以使用常规的 mySQL 做到这一点,但我希望能够以“magento 方式”做到这一点......

我想做的是运行一个查询,该查询将为我在设定日期之间的订单总额求和(grand_total),即计算出 2012 年 7 月以来的总收入。

我已经尝试了各种不同的方法,我可能真的很近,或者我可能在一百万英里之外,所以我很感激任何人能给我的帮助!到目前为止我所拥有的是:

$orders = Mage::getModel('sales/order')->getCollection();

$orders->addAttributeToFilter('date_field', array(
'from' => '2011-09-01',
'to' => '2011-09-30',
));
$orders->addExpressionAttributeToSelect('grand_total', 'SUM({{grand_total}})', grand_total);
$orders_total->getSelect()->$orders->grand_total(SUM(grand_total));

提前谢谢你!

【问题讨论】:

  • 仅供参考,我最终通过集合制作了一个订单导出工具,并且省略了许多订单,这是我在检查原始 MySql 查询时发现的。 “Magento 方式”恕我直言不是正确的方式。

标签: mysql magento mage


【解决方案1】:

'magento 方式' 将使用collections

您的问题是指自 7 月以来的所有订单?如果是这种情况,那么您只需要过滤器中的 'from' 而不是 'to'...

$orderTotals = Mage::getModel('sales/order')->getCollection()
    ->addAttributeToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE)
    ->addAttributeToFilter('created_at', array('from'  => '2012-07-01'))
    ->addAttributeToSelect('grand_total')
    ->getColumnValues('grand_total')
;
$totalSum = array_sum($orderTotals);

// If you need the value formatted as a price...
$totalSum = Mage::helper('core')->currency($totalSum, true, false);

【讨论】:

  • 感谢您的回复,我收到的错误消息是:致命错误:在第 432 行的 /public_html/app/Mage.php 中的非对象上调用成员函数 getModelInstance()
  • 好吧,我想通了,我还没有初始化 Mage::app();在正确的地方!看来有些东西已经奏效了,再次感谢您。
  • 我知道这是旧的,但有没有办法按 SKU 或 ID 过滤?
【解决方案2】:

不要尝试通过将 mysql 表达式添加到查询中来尝试以下操作:

$orders = Mage::getModel('sales/order')->getCollection();
$orders->addAttributeToFilter('created_at', array(
'from' => '2011-09-01',
'to' => '2011-09-30',
))
->addAttributeToSelect('grand_total')
->addAttributeToFilter('status', array('eq'=>'complete'))
;
$grandTotal = 0;

foreach($orders as $order)
{
    $grandTotal += $order->getGrand_total();
}

在这里,我们让集合通过,然后让 magento 循环遍历它,并将集合中每个订单的总计相加。

请注意,我们将 'date_field' 更改为 'created_at'。您也可以将所有的集合修饰符放在一行中。

我们还添加了一个过滤器以排除除已完成订单之外的所有内容。如前所述,它也会计算取消订单的总数。如果您想计算取消的订单,只需删除该行即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多