我可以使用常规的mySQL来做到这一点,但我希望能够以“magento方式”来做到这一点......
我想做的是运行一个查询,该查询将在订单日期之间为我的订单总计SUM(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));
提前谢谢!
答案 0 :(得分:7)
'magento way'将使用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);
答案 1 :(得分: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'
。您也可以将所有集合修饰符放在一行上。
我们还在过滤器中添加了除已完成订单之外的所有内容。正如之前所写,它也会计算取消订单的总计。如果您想计算已取消的订单,只需删除该行。