Во-первых, разбейте ваш цепной вызов, чтобы убедиться, что вы действительно загружаете ордер с помощью
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
var_dump($order->getData());
Предполагая, что вы загрузили ордер, посмотрите на значения, сброшенные выше.Там нет shipping_address_id
.В сочетании с отсутствием метода getShippingAddressId
на Mage_Sales_Model_Order
ваш код не работает.
Попробуйте
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
$id = $order->getShippingAddress()->getId();
Метод адреса getShippingAddress
вернетадрес объекта, который вы можете проверить по его идентификатору.Если вы посмотрите на определение класса Mage_Sales_Model_Order
, вы увидите определения методов
//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;
}
TL; DR для приведенного выше кода: идентификаторы адресов не сохраняются в модели заказов.Адреса для всех заказов хранятся как объект sales/order_address
или Mage_Sales_Model_Order_Address
.