2011-09-21 13 views
8

Bir siparişin zaten bir gönderi ayarlanmış olup olmadığını kontrol etmem gerekiyor. Kullanabileceğim tek veri, siparişin artış kimliğidir. Bir model siparişinin örneğini alıyorum, ancak bir gönderi örneği alabilmem için bir yol göremiyorum.Magento'da bir siparişin gönderim olup olmadığını nasıl kontrol edebilirim?

Bu kodu kullanıyorum:

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

Ama nasıl bir sevkiyat örneği alabilirim? Mage::getModel('sales/order_shipment')->loadByIncrementId($shipment_increment_id) numaralı telefonu arayabileceğimi biliyorum, ancak gönderi artış kimliğini nasıl alabilirim?

cevap

26

Bunu yazan kişinin, yapmanız gerekenleri de yapmak zorunda olabileceğini varsayalım. Genel olarak, Magento nesneleri bire çok bir ilişkiye sahip olduğunda, bir çok üzerinde yüklemek için bir yöntem bulabilirsiniz.

sales/order sınıfında bir takma adınız var.

Bu, Mage_Sales_Model_Order (bir stok kurulumda) karşılık gelir.

Bu sınıfı app/code/core/Mage/Sales/Model/Order.php numaralı telefondan bulabilirsiniz. Eğer bu sınıfı incelerseniz

, 7 tanesi de kelime "gemi" ile metotlar o 7 Of

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

, getShipmentsCollection sadece semantik bir siparişin sevkiyat kapma için yöntem var göstermektedir bulunmaktadır. Yani sadece yapmak

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

deneyin Ya 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

Çok teşekkürler, Alan! GetShipmentsCollection() ve Magento Koleksiyonları'na göz attıktan sonra, getShipmentsCollection() -> count() yöntemini kullanmanın sadece ihtiyacım olan şey olduğunu anladım. –

+5

Açıklamanız her zaman olduğu gibi çok açık (neden Core Team'de çalışmadığınızı merak ediyorum :) ... Ancak ... sipariş durumunu kontrol etmek daha kolay olmazdı = 'complete'? ... Yani: $ collection = Mage :: getResourceModel ('sales/order_collection') -> addAttributeToFilter ('increment_id', $ id) -> addAttributeToFilter ('state', 'complete') – WonderLand

8

için kaynak bakmak o Mage_Sales_Model_Order kamu yöntem vardır tamamlandı:
içten gönderiler sayısını döndürür ve hasShipments()
getShipmentsCollection() sözü kullanır.

İlgili konular