【问题标题】:Magento filter order collection by product skuMagento 按产品 sku 过滤订单集合
【发布时间】:2016-03-11 19:11:15
【问题描述】:

我正在使用 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 中如何进行连接,也不知道我应该加入哪个表。

任何帮助将不胜感激。

【问题讨论】:

    标签: magento


    【解决方案1】:

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

    【讨论】:

    • 您可以将订单商品表加入到订单表中,并使用group_concat mysql函数来连接与1个订单相关的所有sku。
    • 正确的实体是 'sales/order_item' 而不是 'sales_order/item'
    • 上面还有第三个:(我无法编辑)
    • @freento,这工作正常,但我想在特定年份获得订单,我该怎么做?
    • 如何获取这两个日期之间的订单ID?
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多