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


Мне нужно получить объект клиента, принадлежащий определенному (мобильному) номеру телефона. Как я могу сделать это в Magento?

И как я могу получить клиента по номеру телефона, если номер телефона был введен конечными пользователями и может быть записан по-разному?

Например:

  • +1 310-954-8012
  • 1 (310) 954-8012
  • 1-310-954-8012
  • 13109548012
Author: 7ochem, 2015-08-25

1 answers

Вы можете сделать это с помощью коллекции адресов клиентов, так как номер телефона является частью адреса клиента.

Если номер телефона, указанный $phoneNumber, и номер в адресе клиента буквально совпадают, вы можете просто сделать:

$customer = Mage::getResourceModel('customer/address_collection')
    ->addAttributeToSelect('telephone')
    ->addAttributeToFilter('telephone', $phoneNumber)
    ->getFirstItem()->getCustomer();
if ($customer !== false) {
    // Do stuff...
}

Если вам нужно отфильтровать разные символы, вам нужно сделать это с обеих сторон, ввода и SQL, чтобы вы могли сделать:

$charFilter = array('+', ' ', '(', ')', '-');
$phoneNumber = str_replace($charFilter, '', $phoneNumber);

// Build up SQL string replacements    
$sqlFilter = 'at_telephone.value';
foreach ($charFilter as $_char) {
    $sqlFilter = sprintf('REPLACE(%s, "%s", "")', $sqlFilter, $_char);
}

// Build collection
$collection = Mage::getResourceModel('customer/address_collection')
    ->addAttributeToSelect('telephone')
    ->addAttributeToFilter('telephone', array('notnull' => true));
$collection->getSelect()->where($sqlFilter . ' = ?', $phoneNumber);

// Get customer
$customer = $collection->getFirstItem()->getCustomer();
if ($customer !== false) {
    // Do stuff...
}
 7
Author: 7ochem, 2015-08-25 13:12:44