web-dev-qa-db-ja.com

MagentoコアAPIの外部で注文の配送/請求先住所IDを取得するにはどうすればよいですか?

Magentoからの完全な注文から配送/請求先住所IDを取得したい。

次のコードを試しましたが、機能しません。

Mage :: getModel( 'sales/order')-> load($ array_data ["order_id"])-> getShippingAddressId()

誰かアイデアはありますか?

9
Capitaine

数え切れないほどのデバッグとグーグルの後、私はそれを解決しました:

注文に基づく増分注文アドレス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;
3
Capitaine

以下は、同様の解決策を探している人に役立つ可能性があります。

// 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);

}

注:明らかに、このソリューションでは、ユーザーが現在のセッションを持っている必要があります

幸運を。

15
Danny Croft

まず、連鎖した通話を分解して、実際に注文を読み込んでいることを確認します

$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オブジェクトとして保存されます。

7
Alan Storm
$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());
4
Renon Stewart

これを試してください、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());
}
3
user1409392