En primer lugar, romper su llamada encadenado para hacer asegurarse de que está hecho de cargar un pedido con
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
var_dump($order->getData());
Suponiendo que haya cargado la orden, mira a los valores objeto de dumping anteriormente. No hay shipping_address_id
. Eso, combinado con la ausencia de un método getShippingAddressId
en un Mage_Sales_Model_Order
, es la razón por la que su código no funciona.
Trate
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
$id = $order->getShippingAddress()->getId();
El método de dirección getShippingAddress
devolverá un objeto de dirección, que se puede inspeccionar por su ID. Si nos fijamos en la definición de clase Mage_Sales_Model_Order
, se puede ver el método definiciones
//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;
}
El TL; DR para el código anterior, es decir, los identificadores de dirección no se almacenan con el modelo de órdenes. Las direcciones para todas las órdenes se almacenan como un objeto sales/order_address
o Mage_Sales_Model_Order_Address
.
gran tutorial Alan. Un par de errores menores en "valores * s * arriba" y "The * tl; dr *" para el código de arriba " Cheers, JD –
No se puede esperar que escriba el inglés correcto antes del mediodía. (gracias) –
ciertamente no antes de la cafeína :) Y por cierto, no me di cuenta de que "tl; dr" era una abreviación deliberada, ¡gracias a urbandictionary por esa! :) –