Magento的零件装运报告

时间:2015-01-14 16:27:58

标签: magento report

我有一份报告,列出所有已发货的订单,但数据与我在Magento自己生成的页面中看到的数据不符。我的代码如下......

 $collection = Mage::getModel('sales/order')->getCollection()
    ->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_COMPLETE))
    ->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED))
    ->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CLOSED));        

    $collection->getSelect()
    ->joinLeft(array('sfsg' => $collection->getTable('sales/shipment')), 'main_table.increment_id = sfsg.increment_id', array('shipped'=>'sfsg.created_at'))
    ->where('sfsg.created_at IS NOT NULL');        
    $this->setCollection($collection);
    return parent::_prepareCollection();        

因此,第一部分定义没有选择状态为完成,取消或关闭的订单,例如,部分装运的订单和leftJoin位在increment_id(订单ID)上加入sales_flat_shipment表。然后,这将拉出created_at,即创建/发送货件的时间。

这使我的报告没有麻烦,但如果我使用Magento的内置工具查看报告,其中的数据与我看到的数据不符。

谁能告诉我这里哪里出错了?它一定是lefJoin,这是我正在思考的不对。如果有人有任何有用的文件,我可以阅读,也将非常感激。

1 个答案:

答案 0 :(得分:0)

如果替换

行,上述操作将起作用
->joinLeft(array('sfsg' => $collection->getTable('sales/shipment')), 'main_table.increment_id = sfsg.increment_id', array('shipped'=>'sfsg.created_at'))

->joinLeft(array('sfsg' => $collection->getTable('sales/shipment')), 'main_table.entity_id = sfsg.order_id', array('shipped'=>'sfsg.created_at'))

奇怪的是,Magento决定命名与2个表entity_id和order_id匹配的列。

对此的任何解释都将不胜感激。