質問

特定の(携帯)電話番号に属する顧客オブジェクトを取得する必要があります。Magentoではどうすればいいですか?

そして電話番号がエンドユーザーによって入力され、さまざまな方法で書くことができる場合は、電話番号で顧客を取得できますか?

例えば:

  • + 1 310-954-8012
  • 1(310)954-8012
  • 1-310-954-8012
  • 13109548012
役に立ちましたか?

解決

電話番号が顧客の住所の一部であるため、カスタマーアドレスコレクションを介してこれを行うことができます。

$phoneNumberで与えられた電話番号と顧客の住所内の1つが文字通り一致する場合は、単純にすることができます。

$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...
}
.

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top