1

我正在使用 magento 1.7,我需要从包含至少一个与 sku 匹配的项目的某个 increment_id 获取所有订单。

这是我所拥有的:

      $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 致命错误,因为 'sku' 不是一个字段。我试过 addAttributeToFilter() ,它也不会工作。

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

任何帮助将不胜感激。

4

1 回答 1

5

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');
于 2013-04-15T15:02:03.083 回答