Magentoからの完全な注文から配送/請求先住所IDを取得したい。
次のコードを試しましたが、機能しません。
Mage :: getModel( 'sales/order')-> load($ array_data ["order_id"])-> getShippingAddressId()
誰かアイデアはありますか?
数え切れないほどのデバッグとグーグルの後、私はそれを解決しました:
注文に基づく増分注文アドレス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;
顧客に基づく注文の住所エンティティIDの場合、
$quote = Mage::getSingleton('checkout/session')->getQuote();
$billing_address_id=$quote->getBillingAddress()->customer_address_id;
$shipping_address_id=$quote->getShippingAddress()->customer_address_id;
以下は、同様の解決策を探している人に役立つ可能性があります。
// 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);
}
注:明らかに、このソリューションでは、ユーザーが現在のセッションを持っている必要があります
幸運を。
まず、連鎖した通話を分解して、実際に注文を読み込んでいることを確認します
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
var_dump($order->getData());
注文を読み込んだと仮定して、上記でダンプされた値を確認します。 shipping_address_id
はありません。それは、Mage_Sales_Model_Order
にメソッドgetShippingAddressId
がないことと相まって、コードが機能しない理由です。
試してみてください
$order = Mage::getModel('sales/order')->load($array_data["order_id"]);
$id = $order->getShippingAddress()->getId();
getShippingAddress
addressメソッドは、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;
}
上記のコードのTL; DRは、住所IDが注文モデルに保存されていないことです。すべての注文のアドレスは、sales/order_address
またはMage_Sales_Model_Order_Address
オブジェクトとして保存されます。
$order = Mage::getModel('sales/order')->load($orderId);
//Get shipping address Id
$order->getShippingAddress()->getId();
//format output
echo $order->getShippingAddress()->format('html');
//Get shipping address data
print_r($order->getShippingAddress()->getData());
これを試してください、shipping_address_idとbilling_address_idを取得できます
$orderCollection = Mage::getResourceModel('sales/order_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('main_table.customer_id',$session->getId());
echo "<pre>";
foreach ($orderCollection as $order){
$shippingAddress = Mage::getModel('sales/order_address')->load($order->getShippingAddressId());
$billingAddress = Mage::getModel('sales/order_address')->load($order->getBillingAddressId());
print_r($order->getData());
print_r($shippingAddress->getData());
print_r($billingAddress->getData());
}