First, break apart your chained call to make make sure you're actually loading an order with
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
var_dump($order->getData());
Assuming you've loaded the order, look at the values dumped above. There's no shipping_address_id
. That, combined with there being no method getShippingAddressId
on a Mage_Sales_Model_Order
is why your code isn't working.
Try
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
$id = $order->getShippingAddress()->getId();
The getShippingAddress
address method will return an address object, which you can inspect for its id. If you look at the Mage_Sales_Model_Order
class definition, you can see the method definitions
//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;
}
The TL;DR for the code above is, address IDs aren't stored with the orders model. The addresses for all orders are stored as a sales/order_address
or Mage_Sales_Model_Order_Address
object.