Получение количества товаров в определенных заказах в Magento

Я хотел бы попросить вас предоставить часть информации, которая поможет мне решить мою проблему. Моя цель - получить из базы данных Magento определенное количество продуктов в каждом заказе (заказы должны иметь точно определенный статус). Я использую пакет/скрипт отдельно от Magento, но использую Mage:app. Я не знаю, начинать ли мне с моделей (что кажется логичным, но в то же время медленным) или работать непосредственно с базой данных (что сложнее).

Спасибо за любой совет.

С уважением,


person Lormitto    schedule 20.07.2012    source источник


Ответы (1)


Запросить базу данных не так уж сложно:

   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/>';
}

Первый подход может быть быстрее, но второй будет Magneto-Upgrade-Safe. Так что вы сами решаете, какой подход использовать.

person user487772    schedule 20.07.2012
comment
пожалуйста, проверьте обновленный код magento. теперь он получает то, что вам нужно, в одной коллекции. - person user487772; 20.07.2012
comment
Еще один вопрос. Знаете ли вы, можно ли получить предметы по атрибуту в случае заказа. Я хотел бы избежать foreach и получить конкретный элемент по пользовательскому атрибуту и ​​не знаю, возможно ли это вообще? - person Lormitto; 20.07.2012
comment
Если вы видели мое редактирование, я избавился от foreach и if, добавив join в основную таблицу. Я так понимаю, что для получения всех товаров по атрибуту потребуется еще несколько join, но в этом случае запрос может стать очень тяжелым. - person user487772; 20.07.2012