Идентификация Зарегистрированных Пользователей, Которые Никогда Не Совершали Покупки
Когда кто-то регистрируется на корпоративном сайте Magento (версия 1.13), где хранится эта информация? Это может быть в разделе "Подписчики на рассылку новостей" или "Клиенты", но этот список не обязательно будет включать всех, верно? Я пытаюсь создать список людей, которые зарегистрировались, но никогда не совершали покупки.
2 answers
У меня есть бесплатный модуль, который включает в себя аналогичный отчет
Разница в том, что в нем перечислены только те люди, которые подписались на рассылку новостей и никогда ее не покупали.
Я думаю, вы можете использовать это в качестве отправной точки.
Для получения такой коллекции я использую следующий код:
// Get the customer emails
$orderEmailsCollection = Mage::getModel('sales/order')->getCollection()->addAttributeToSelect('customer_email');
// Call iterator walk method with collection query string and callback method as parameters
// Has to be used to handle massive collection instead of foreach
Mage::getSingleton('core/resource_iterator')->walk($orderEmailsCollection->getSelect(), array(array($this, 'fillArray')));
$collection = Mage::getModel('newsletter/subscriber')->getCollection()
->addFieldToSelect(array('subscriber_id','subscriber_email','subscriber_status'))
->addFieldToFilter('subscriber_email',array('nin'=>$this->filterOrdersEmails));
Обратите внимание, что метод обратного вызова fillArray
- это просто метод заполнения защищенного массива электронными письмами клиентов:
$this->filterOrdersEmails[] = $args['row']['customer_email'];
Если это одноразовый процесс, возможно, проще всего просто использовать SQL-запрос, подобный этому:
SELECT
user.entity_id, user.email
FROM customer_entity AS user
LEFT JOIN sales_flat_order AS ord
ON ord.customer_id = user.entity_id
WHERE ord.entity_id IS NULL
GROUP BY user.entity_id;