2

問題の解決に役立つ情報をお伺いしたいと思います。私の目的は、すべての注文でMagentoデータベースから特定の製品の数量を取得することです(注文は正確に定義されたステータスである必要があります)。Magentoとは別にバッチ/スクリプトを使用していますが、Mage:appを使用しています。モデルから始める必要があるのか​​(論理的なアプローチのようですが、同時に遅い)、データベースで直接作業するのか(これはより困難です)はわかりません。

アドバイスありがとうございます。

よろしく、

4

1 に答える 1

3

データベースのクエリはそれほど複雑ではありません。

   SELECT * 
     FROM sales_flat_order o
LEFT JOIN sales_flat_order_item i ON o.entity_id = i.order_id
    WHERE o.status IN ('pending', 'processing')
      AND i.product_id = <YOUR_PRODUCT_ID> 

total_qty_ordered結果のフィールドは、注文数量を表します。

モデルを介して注文されたアイテムの数量を取得することも、それほど重くはありません。

<?php

require_once('app/Mage.php');
umask(0);
Mage::app('default');

$core_resource = Mage::getSingleton('core/resource');
$orders = Mage::getResourceModel('sales/order_collection');
$orders->getSelect()->joinLeft(array('ordered_products' => $core_resource->getTableName('sales/order_item')), 'main_table.entity_id = ordered_products.order_id', array('ordered_products.*'));
$orders->addAttributeToSelect('*')
       ->addFieldToFilter('status', array('in' => array('pending', 'processing')))
       ->addAttributeToFilter('main_table.store_id', Mage::app()->getStore()->getId())
       ->addAttributeToFilter('ordered_products.product_id', array('eq' => '2'));
foreach($orders as $order) {
    echo 'Order #' . $order->getId() . ': ' . $order->getData('total_qty_ordered') . '<br/>';
}

最初のアプローチはより高速かもしれませんが、2番目のアプローチはMagneto-Upgrade-Safeになります。したがって、使用するアプローチを決定します。

于 2012-07-20T10:45:39.327 に答える