我在获取客户地址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即可更新城市。我不知道为什么它返回一个空值。
谢谢。
编辑的详细信息:
下图显示了已保存的送货地址:
我想知道的是如何知道每个送货地址的客户地址ID 。因此,我可以修改所需的任何细节。
答案 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'];
此地址是付款期间选择的最终送货地址 结帐流程的阶段。