2013-04-15 3 views
1

Я использую magento 1.7, и мне нужно получить все заказы от определенного increment_id, содержащего хотя бы один элемент, соответствующий sku.Коллекция заказа фильтра Magento по продукту sku

Вот что у меня есть:

 $orderCollection = Mage::getModel('sales/order')->getCollection() 
     ->addFieldToFilter('status', 
      array(
       'nin' => array(
        'new', 
        'pending', 
        'pending_payment', 
        'holded', 
        'canceled') 
      )) 
     ->addFieldToFilter('increment_id', array('gteq' => $last_order)); 

Если добавить строку с:

$orderCollection->addFieldToFilter('sku', $findSku); 

Я получаю фатальную ошибку PHP, так как «ы» не является полем. Я пробовал addAttributeToFilter(), и он не будет работать.

Я знаю, что мне нужно создать соединение с другой таблицей, но я не знаю, как делаются соединения в Magento, и я не знаю, к какой таблице я должен присоединиться.

Любая помощь будет принята с благодарностью.

ответ

2

SKU размещаются в таблице товаров по заказу не в порядке. Ваш последний запрос должен выглядеть как этот:

SELECT o.increment_id 
FROM sales_flat_order_item oi 
INNER JOIN sales_flat_order o ON o.entity_id = oi.order_id 
WHERE product_id=XXX 
ORDER BY o.increment_id DESC; 

Этот запрос может быть сделано с использованием почти такой синтаксис:

$orderItem = Mage::getModel('sales/order_item')->getCollection(); 
$orderItem 
    ->getSelect() 
    ->joinInner(array('order' => Mage::getSingleton('core/resource')->getTableName('sales/order')), 'order.entity_id = main_table.order_id') 
    ->where('product_id=?', $productId) 
    ->order('main_table.order_id DESC'); 
+0

но что, если нам нужно работать с заказами? –

+0

Вы можете присоединиться к таблице элементов заказа в таблице заказов и использовать функцию group_concat mysql для согласования всех skus, связанных с 1 порядком. – freento

+1

Правильная сущность - «sales/order_item» не «sales_order/item» – PartialOrder

Смежные вопросы