Как получить клиента по номеру телефона?
Мне нужно получить объект клиента, принадлежащий определенному (мобильному) номеру телефона. Как я могу сделать это в Magento?
И как я могу получить клиента по номеру телефона, если номер телефона был введен конечными пользователями и может быть записан по-разному?
Например:
- +1 310-954-8012
- 1 (310) 954-8012
- 1-310-954-8012
- 13109548012
3
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