Magento按产品sku过滤订单

时间:2013-04-15 13:32:55

标签: magento

我正在使用magento 1.7,我需要获取某些increment_id的所有订单,其中包含至少一个与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); 

由于'sku'不是字段,我将收到PHP致命错误。我已经尝试过addAttributeToFilter(),它也无法正常工作。

我知道我需要与另一个表建立连接,但我不知道在Magento中如何建立联接,我不知道我应该加入哪个表。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

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');