Php 编辑带有可配置产品的订单后,通过增量_id在Magento中检索单个订单

Php 编辑带有可配置产品的订单后,通过增量_id在Magento中检索单个订单,php,magento,Php,Magento,我在一家主要销售可配置产品的Magento商店遇到了一个有趣的问题。我有一些代码将订单信息打包并发送到外部仓库,然后由外部仓库完成订单。对于这个请求,我使用increment\u id作为标识符。我们会定期询问仓库订单是否已发货,如果他们报告已发货,我们会通过increment\u id在Magento中检索订单,并通过创建新的发货来完成订单 现在,在编辑订单之前,此操作可以正常工作。由于Magento处理可配置的产品,编辑订单涉及取消当前订单,并使用相同的increment\u id重新创建订

我在一家主要销售可配置产品的Magento商店遇到了一个有趣的问题。我有一些代码将订单信息打包并发送到外部仓库,然后由外部仓库完成订单。对于这个请求,我使用
increment\u id
作为标识符。我们会定期询问仓库订单是否已发货,如果他们报告已发货,我们会通过
increment\u id
在Magento中检索订单,并通过创建新的发货来完成订单

现在,在编辑订单之前,此操作可以正常工作。由于Magento处理可配置的产品,编辑订单涉及取消当前订单,并使用相同的
increment\u id
重新创建订单。随后,我基于
increment\u id
的交互现在被破坏,因为当我这样做时,只有第一个(取消的)订单会被检索,因为
increment\u id
不再是唯一的:

<?php
$order = Mage::getModel('sales/order')->loadByIncrementId(100000001);
?>
但是,我很想知道是否有一种方法可以从集合中仅获取一条记录,从而消除对
foreach
的需求。可以这样做吗?

使用getFirstItem()


虽然Mukesh的答案在技术上是可行的,但如果您有一个请求返回的大型数据集,则在加载整个集合时,它可能会超时,这是getFirstItem()函数的第一行发生的情况。这里概述了这一点:

我显然需要更紧密地RTFM。这太完美了,谢谢!希望通过增量_id进行过滤不会产生大量集合!每个增量id应始终只有一个未取消的订单
<?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
}
?>
$orders = Mage::getModel('sales/order')
  ->getCollection()
  ->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED))
  ->addAttributeToFilter('increment_id', 100000001)
  ->getFirstItem();
$order = Mage::getModel('sales/order')->loadByIncrementId($orderId);