Как проверить, есть ли у заказа отгрузка в Magento?

мне нужно проверить, если заказ уже некоторый набор поставки. Единственные данные, которые я могу использовать, это идентификатор приращения заказа. Я получаю экземпляр модельного заказа, но я не вижу способа получить экземпляр отгрузки.

Я использую этот код:

$order = Mage::getModel('sales/order')
    ->loadByIncrementId($order_increment_id);

но как я могу получить груз экземпляр? Я знаю, что могу позвонить Mage::getModel('sales/order_shipment')->loadByIncrementId($shipment_increment_id) но как получить идентификатор приращения отгрузки?

2 ответов


предположим, что человек, который написал это, возможно, также должен был сделать то, что вам нужно сделать. Как правило, когда объекты Magento имеют отношение один ко многим, вы можете найти метод для загрузки многих на один.

у вас есть псевдоним класса sales/order.

что соответствует Mage_Sales_Model_Order (в наличии).

вы можете найти этот класс в app/code/core/Mage/Sales/Model/Order.php.

если вы изучите этот класс, есть 7 методов со словом "корабль" в их!--9-->

function canShip
function setShippingAddress
function getShippingAddress
function getShip
function getShipmentsCollection
function hasShip
function prepareShip

из этих 7, только семантика getShipmentsCollection укажите способ захвата отгрузок заказа. Так что попробуйте

foreach($order->getShipmentsCollection() as $shipment)
{
    var_dump(get_class($shipment));
    //var_dump($shipment->getData());
}

или посмотрите на источник для 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;
}

просто, чтобы сделать его полным Mage_Sales_Model_Order имеет открытый метод:
hasShipments()
которая возвращает количество отгрузок и внутренне использует упомянутые getShipmentsCollection().