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