Как получить адрес клиента по идентификатору клиента?

9

Как получить адрес клиента / адрес для выставления счета по идентификатору клиента? вот что я сделал до сих пор:

$customerId = $_POST["customer_id"];
$customer = $this->_customerRepository->getById($customerId);
$address = $this->_addressRepository->getByCustomerId($customerId);//error
простой парень
источник

Ответы:

10

Вы не можете получить адрес на основе идентификатора клиента, поэтому этот код никогда не будет работать:

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

Потому что getByCustomerIdметод не существует в классах контракта на обслуживание.

Однако вы можете использовать класс клиента контракта на обслуживание данных со следующим кодом:

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

Обратите внимание, что getAddressesвернет массив Magento\Customer\Api\Data\AddressInterface.

Если вам нужен платежный адрес по умолчанию, вы можете позвонить:

$billingAddress = $customer->getDefaultBilling(); 
Рафаэль в цифровом пианизме
источник
но когда я использую $customer->getDefaultBilling();его, возвращаем NULL
простой парень
@simpleguy, потому что клиент, которого вы тестируете, не имеет адреса выставления счета по умолчанию, вероятно,
Рафаэль из Digital
@RaphaelatDigitalPianism Это не работает для меня. Не могли бы вы сообщить мужчинам, как я могу получить эти детали.
Гаурав Агравал
Как получить адрес?
Джафар Пинджар
6

Для получения адреса клиента используйте идентификатор заказа в файле .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'];
}
Абхинав Сингх
источник
1
protected $_address;

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

Используйте в своей функции: -

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

Вы можете получить коллекцию адресов, как показано ниже: -

$addresses = $addressObj->getCollection();
Пурушотам Шарма
источник
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());
}
Башид Мохд
источник