2011-09-21 12 views
8

Ho bisogno di verificare se un ordine ha già una serie di spedizioni. L'unico dato che posso usare è l'ID di incremento dell'ordine. Ricevo un'istanza di un ordine di modello, ma non vedo come posso ottenere un'istanza di spedizione.Come verificare se un ordine ha una spedizione in Magento?

sto usando questo codice:

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

Ma come posso ottenere un'istanza spedizione? So che posso chiamare Mage::getModel('sales/order_shipment')->loadByIncrementId($shipment_increment_id) ma come ottengo l'ID di incremento della spedizione?

risposta

26

Supponiamo che la persona che ha scritto questo potrebbe anche aver bisogno di fare ciò che è necessario fare. Generalmente, quando gli oggetti Magento hanno una relazione uno a molti, puoi trovare un metodo per caricare i molti su quello.

Hai un alias di classe sales/order.

Ciò corrisponde a Mage_Sales_Model_Order (in un'installazione stock).

Puoi trovare questo corso allo app/code/core/Mage/Sales/Model/Order.php.

Se si esamina questa classe, ci sono 7 metodi con la parola "nave" in loro

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

Di questi 7, solo la semantica di getShipmentsCollection indicare un metodo per afferrare le spedizioni di un ordine. Quindi cercate

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

Oppure dare un'occhiata alla fonte per 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; 
} 
+2

Grazie mille, Alan! Dopo aver dato un'occhiata a getShipmentsCollection() e Magento Collections, ho capito che usare getShipmentsCollection() -> count() è proprio quello di cui ho bisogno. –

+5

La tua spiegazione è molto chiara come sempre (mi chiedo perché non lavori nel Core Team :) ... Tuttavia ... non sarebbe più facile controllare lo stato dell'ordine = 'completo'? ... Quindi: $ collection = Mage :: getResourceModel ('sales/order_collection') -> addAttributeToFilter ('increment_id', $ id) -> addAttributeToFilter ('stato', 'completo') – WonderLand

8

Proprio per renderla completa Mage_Sales_Model_Order ha metodo pubblico:
hasShipments()
che restituisce il numero delle spedizioni ed internamente impieghi menzionati getShipmentsCollection().

Problemi correlati