4

これは通常のmySQLで実行できますが、「magentoの方法」で実行できるようにしたいと思います...

私がやりたいのは、設定された日付の間の注文の合計をSUM(grand_total)するクエリを実行することです。つまり、2012年7月からの総収益を計算します。

私はこれについてさまざまなバリエーションを試しましたが、私は本当に近くにいるか、100万マイルも離れている可能性があるので、誰かが私に助けてくれることを感謝します!私がこれまでに持っているのは:

$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の方法」はコレクションを使用します。

あなたの質問は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);
于 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'。また、すべてのコレクション修飾子を1行に配置することもできます。

完了した注文を除くすべてを除外するフィルターも追加しました。以前に書かれたように、キャンセルされた注文からの総計もカウントします。キャンセルされた注文をカウントする場合は、その行を削除するだけです。

于 2012-08-09T17:15:24.130 に答える