2013-04-15 42 views
1

我使用的是magento 1.7,我需要從某個包含至少一個匹配SKU的商品的increment_id獲取所有訂單。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); 

因爲 'SKU' 是不是現場我會得到一個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函數來連接與1個訂單相關的所有skus。 – freento

+1

正確的實體是'sales/order_item'而不是'sales_order/item' – PartialOrder

相關問題