我有一份报告,列出所有已发货的订单,但数据与我在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,这是我正在思考的不对。如果有人有任何有用的文件,我可以阅读,也将非常感激。
答案 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匹配的列。
对此的任何解释都将不胜感激。