In primo luogo, spezzare la chiamata incatenato per fare assicurarsi che si sta effettivamente caricare un ordine con
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
var_dump($order->getData());
Supponendo che hai caricato l'ordine, guardare i valori di dumping sopra. Non c'è shipping_address_id
. Questo, combinato con l'assenza di un metodo getShippingAddressId
su un Mage_Sales_Model_Order
è il motivo per cui il tuo codice non funziona.
Prova
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
$id = $order->getShippingAddress()->getId();
Il metodo indirizzo getShippingAddress
restituirà un oggetto indirizzo, che è possibile controllare per la sua identificazione. Se si guarda alla definizione di classe Mage_Sales_Model_Order
, è possibile vedere il metodo definizioni
//magento 1.4
public function getShippingAddress()
{
foreach ($this->getAddressesCollection() as $address) {
if ($address->getAddressType()=='shipping' && !$address->isDeleted()) {
return $address;
}
}
return false;
}
public function getAddressesCollection()
{
if (is_null($this->_addresses)) {
$this->_addresses = Mage::getResourceModel('sales/order_address_collection')
->addAttributeToSelect('*')
->setOrderFilter($this->getId());
if ($this->getId()) {
foreach ($this->_addresses as $address) {
$address->setOrder($this);
}
}
}
return $this->_addresses;
}
Il TL; DR per il codice di cui sopra è, gli ID di indirizzi non vengono memorizzati con il modello ordini. Gli indirizzi per tutti gli ordini vengono memorizzati come oggetto sales/order_address
o Mage_Sales_Model_Order_Address
.
fonte
2010-08-30 15:42:27
grande walkthrough Alan. Un paio di errori minori in là "valori * s * umped sopra" e "The * tl; dr * per il codice sopra" Cheers, JD –
Non mi si può aspettare che digiti inglese corretto prima di mezzogiorno. (grazie) –
certamente non prima della caffeina :) E a proposito, non mi rendevo conto che "tl; dr" era un'abbreviazione intenzionale - grazie a urbandictionary per quello! :) –