我想从Magento的完整订单中获取送货/账单地址ID.
我尝试了以下代码,但它没有用:
法师:: getModel( '销售/订单') - >负载($ array_data [ "ORDER_ID"]) - > getShippingAddressId()
有人有什么想法吗?
Dan*_*oft 15
以下内容可能有助于寻找类似解决方案的人:
// Get the id of the last order for the current user(session)
$orderId = Mage::getSingleton('checkout/session')->getLastOrderId();
// If an order actually exists
if ($orderId) {
//Get the order details based on the order id ($orderId)
$order = Mage::getModel('sales/order')->load($orderId);
// Get the id of the orders shipping address
$shippingId = $order->getShippingAddress()->getId();
// Get shipping address data using the id
$address = Mage::getModel('sales/order_address')->load($shippingId);
// Display the shipping address data array on screen
var_dump($address);
}
Run Code Online (Sandbox Code Playgroud)
注意:显然,此解决方案要求用户拥有当前会话
祝好运.
首先,打破您的链式通话,确保您实际上正在加载订单
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
var_dump($order->getData());
Run Code Online (Sandbox Code Playgroud)
假设您已加载订单,请查看上面转储的值.没有shipping_address_id.也就是说,其中不存在相结合的方法 getShippingAddressId上Mage_Sales_Model_Order就是为什么你的代码不能正常工作.
尝试
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
$id = $order->getShippingAddress()->getId();
Run Code Online (Sandbox Code Playgroud)
该getShippingAddress地址方法将返回地址对象,你可以检查其ID.如果查看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;
}
Run Code Online (Sandbox Code Playgroud)
TL;上面代码的DR是,地址ID不与订单模型一起存储.所有订单的地址都存储为一个sales/order_address或一个Mage_Sales_Model_Order_Address对象.
经过无数次调试和谷歌搜索后,我解决了这个问题:
对于基于订单增量的订单地址id,
$order_id=Mage::getSingleton('checkout/session')->getLastRealOrderId();
$sales_order=Mage::getModel('sales/order')->load($order_id);
$billing_address_id=$sales_order->billing_address_id;
$shipping_address_id=$sales_order->shipping_address_id;
Run Code Online (Sandbox Code Playgroud)
对于基于客户的订单的地址实体 ID,
$quote = Mage::getSingleton('checkout/session')->getQuote();
$billing_address_id=$quote->getBillingAddress()->customer_address_id;
$shipping_address_id=$quote->getShippingAddress()->customer_address_id;
Run Code Online (Sandbox Code Playgroud)