如何检查订单在Magento中是否有货?

Ita*_*dré 9 magento

我需要检查订单是否已经设置了一些货物.我可以使用的唯一数据是订单的增量ID.我正在获取模型订单的实例,但我没有看到我可以获得货运实例的方法.

我正在使用此代码:

$order = Mage::getModel('sales/order')
    ->loadByIncrementId($order_increment_id);
Run Code Online (Sandbox Code Playgroud)

但是我如何获得货运实例?我知道我可以打电话Mage::getModel('sales/order_shipment')->loadByIncrementId($shipment_increment_id)但是如何获得货件增量ID?

Ala*_*orm 27

假设写这篇文章的人可能也需要做你需要做的事情.通常,当Magento对象具有一对多关系时,您可以找到一种方法来加载多个对象.

你有一个别名sales/order.

这对应于Mage_Sales_Model_Order(在库存安装中).

你可以找到这个课程app/code/core/Mage/Sales/Model/Order.php.

如果你检查这个类,有7个方法,其中包含"ship"一词

function canShip
function setShippingAddress
function getShippingAddress
function getShip
function getShipmentsCollection
function hasShip
function prepareShip
Run Code Online (Sandbox Code Playgroud)

在这7个中,只有语义getShipmentsCollection表示抓取订单的货物的方法.所以试试吧

foreach($order->getShipmentsCollection() as $shipment)
{
    var_dump(get_class($shipment));
    //var_dump($shipment->getData());
}
Run Code Online (Sandbox Code Playgroud)

或者看看源代码 getShipmentsCollection

public function getShipmentsCollection()
{
    if (empty($this->_shipments)) {
        if ($this->getId()) {
            $this->_shipments = Mage::getResourceModel('sales/order_shipment_collection')
                ->setOrderFilter($this)
                ->load();
        } else {
            return false;
        }
    }
    return $this->_shipments;
}
Run Code Online (Sandbox Code Playgroud)

  • 你的解释一如既往地非常清楚(我想知道你为什么不在Core Team工作:) ...但是......检查订单状态='完成'会不会更容易?...所以:$ collection = Mage :: getResourceModel('sales/order_collection') - > addAttributeToFilter('increment_id',$ id) - > addAttributeToFilter('state','complete') (5认同)
  • 非常感谢,艾伦!在看了getShipmentsCollection()和Magento Collections之后,我发现使用getShipmentsCollection() - > count()就是我需要的. (2认同)

小智 9

只是为了使它完整Mage_Sales_Model_Order有公共方法:
hasShipments()
它返回货物的数量和提到的内部使用getShipmentsCollection().