4

我可以使用常规的 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));

先感谢您!

4

2 回答 2

7

'magento 方式'将使用collections

您的问题是自 7 月以来的所有订单?如果是这种情况,那么您只需要过滤器中的“发件人”而不是“收件人”...

$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);
于 2012-08-10T07:44:31.023 回答
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'. 您也可以将所有集合修饰符放在一行上。

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

于 2012-08-09T17:15:24.130 回答