Я хочу получить идентификатор адреса доставки / выставления счета из только что завершенного заказ из Magento.
Я пробовал следующий код, но он не работал:
Mage :: getModel ('sales / order') -> load ($ array_data ["order_id"]) -> getShippingAddressId ()
У кого-то есть идеи?
Во-первых, разбейте связанный вызов, чтобы убедиться, что вы действительно загружаете заказ с помощью
$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
.