Como obter o endereço do cliente por ID do cliente?

9

Como obter o endereço do cliente / endereço de cobrança pelo ID do cliente? Aqui está o que eu fiz até agora:

$customerId = $_POST["customer_id"];
$customer = $this->_customerRepository->getById($customerId);
$address = $this->_addressRepository->getByCustomerId($customerId);//error
cara simples
fonte

Respostas:

10

Você não pode recuperar um endereço com base no ID do cliente, portanto esse código nunca funcionará:

$address = $this->_addressRepository->getByCustomerId($customerId);//error

Porque o getByCustomerIdmétodo não existe nas classes de contrato de serviço.

No entanto, o que você pode fazer é usar a classe de cliente do contrato de serviço de dados com o seguinte código:

$customerId = $_POST["customer_id"];
$customer = $this->_customerRepository->getById($customerId);
$addresses = $customer->getAddresses();

Observe que getAddressesretornará uma matriz de Magento\Customer\Api\Data\AddressInterface.

Se você precisar do endereço de cobrança padrão, ligue para:

$billingAddress = $customer->getDefaultBilling(); 
Raphael na Digital Pianism
fonte
mas quando eu usá- $customer->getDefaultBilling();lo retornar NULL
simple guy
@simpleguy isso é porque o cliente que você está testando não tem um endereço de faturamento padrão provavelmente
Raphael em Digital pianismo
@RaphaelatDigitalPianism Não está funcionando para mim. Você pode, por favor, informar aos homens como posso obter esses detalhes.
Gaurav Agrawal
Como obter o addressID?
Jafar pinjar
6

Para obter a consulta do cliente usando o ID do pedido no arquivo .phtml

$customerId = 3;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerObj = $objectManager->create('Magento\Customer\Model\Customer')->load($customerId);
$customerAddress = array();

foreach ($customerObj->getAddresses() as $address)
{
    $customerAddress[] = $address->toArray();
}

foreach ($customerAddress as $customerAddres) {

    echo $customerAddres['street'];
    echo $customerAddres['city'];
}
Abhinav Singh
fonte
1
protected $_address;

public function __construct(
    ...
    \Magento\Customer\Model\Address $address,
    ...     
)
{
    ...
    $this->_address = $address;
    ...
}

Use na sua função: -

$addressObj = $this->_address;
$addressObj->load($addressid); 

você pode obter a coleção de endereços como abaixo: -

$addresses = $addressObj->getCollection();
Purushotam Sharma
fonte
0

$ private $ customerFactory;

public function __construct(
    \Magento\Customer\Model\CustomerFactory $customerFactory,
    Context $context
) {
    parent::__construct($context);
    $this->customerFactory = $customerFactory;
}

public function execute()
{
    $customerId = 1;
    $customer = $this->customerFactory->create();
    echo "<pre>";
    var_dump($customer->getAddressCollection()->addFieldToFilter('parent_id',$customerId)->getData());
}
mohd bashid
fonte