我遇到了Magento商店的一个有趣问题,该商店主要销售可配置产品.我有一些代码可以打包订单信息并将其发送到外部仓库,然后外部仓库完成订单.有了这个请求,我正在使用它increment_id作为标识符.我们会定期向仓库询问订单是否已发货,如果报告已经发货,我们会通过Magento检索订单increment_id并通过创建新货件完成订单.
现在,这可以正常工作,直到订单被编辑.由于Magento处理可配置产品,编辑订单涉及取消当前订单并使用相同的方式重新创建increment_id.随后,我基于这些的交互increment_id现在被打破了,因为当我做这样的事情时,似乎只检索到第一个(已取消的)订单,因为increment_id它不再是唯一的:
<?php
$order = Mage::getModel('sales/order')->loadByIncrementId(100000001);
?>
Run Code Online (Sandbox Code Playgroud)
通常情况下,重复increment_id是不可能的,所以我希望Magento优先考虑'主动'订单,但事实并非如此.
现在,我找到了一种方法来解决这个问题:
<?php
$orders = Mage::getModel('sales/order')
->getCollection()
->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED))
->addAttributeToFilter('increment_id', 100000001);
foreach ($orders as $order) {
// Do what we need with the order
}
?>
Run Code Online (Sandbox Code Playgroud)
但是,我有兴趣知道是否有办法从集合中获取一条记录,从而无需使用foreach.可以这样做吗?
使用getFirstItem()
$orders = Mage::getModel('sales/order')
->getCollection()
->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED))
->addAttributeToFilter('increment_id', 100000001)
->getFirstItem();
Run Code Online (Sandbox Code Playgroud)
小智 6
$order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15291 次 |
| 最近记录: |