Magento 2-在结帐会话中通过送货地址获取客户地址ID

时间:2019-02-15 10:34:09

标签: magento2 shipping street-address magento2.2 customer

我在获取客户地址ID时遇到麻烦,因为它返回的是空值。

这是我尝试过的:

$checkout = $this->_sessionCheckout->getQuote();
if ($checkout) {
   $shippingAddress = $checkout->getShippingAddress();
   if ($shippingAddress) {
       $addressId = $shippingAddress->getCustomerAddressId();
       $this->_logger->log(100, print_r('address Id: ' . $addressId , true)); //Returns null 
       /** @var \Magento\Customer\Api\Data\AddressInterface $address */
       $address = $this->_addressRepository->getById($addressId);
       $address->setCity($city_name);
       $this->_addressRepository->save($address);
}

我只需要获取客户地址ID即可更新城市。我不知道为什么它返回一个空值。

谢谢。


编辑的详细信息:

下图显示了已保存的送货地址:

shipping-addresses

我想知道的是如何知道每个送货地址的客户地址ID 。因此,我可以修改所需的任何细节。

2 个答案:

答案 0 :(得分:0)

以访客用户身份下订单时,您必须在结帐页面上添加收货地址,此时将没有客户参考对象,因此您将客户地址ID的值设置为空。

当您以注册客户的身份下订单时,您应该具有默认的送货地址,然后才能获得客户地址ID的值。

之所以会这样,是因为customer_address_id是对customer_address表的引用,而customer_address是对customer_entity表的引用。

答案 1 :(得分:0)

您可以按以下方式获得订单 如果您尚未调用此信息,请在构造器中添加以下内容(如果尚未使用)。

protected $checkoutSession;
public function __construct(
        \Magento\Checkout\Model\Session $checkoutSession,
        \Psr\Log\LoggerInterface $logger
    )
    {

        $this->checkoutSession = $checkoutSession;
        $this->logger = $logger;
    }


    $order = $session->getLastRealOrder();
    $orderdata = $order->getData();
    $shipping_address_id = $orderdata['shipping_address_ID'];
  

此地址是付款期间选择的最终送货地址   结帐流程的阶段。