Получение коллекции клиентов только с теми, кто подписан на информационные бюллетени
Мне нужно импортировать множество клиентов в стороннюю почтовую компанию, но мне нужно импортировать только тех, кто в настоящее время подписан на рассылку новостей. Сам импорт должен быть файлом сведений о клиенте, который мне нужно сгенерировать. Я знаю, что мог бы загрузить всех клиентов в коллекцию и перебирать их, вставляя только те, которые подписаны в файл импорта, но поскольку у нас более 90000 клиентов, я бы предпочел просто загрузить тех, которые подписаны в коллекция. Сам импорт использует API, но для этого необходимо добавить файл импорта в качестве вложения (это нормально, просто включите его для информации).
Есть идеи?
3 answers
Вы должны присоединиться к коллекции EAV с обычной таблицей. Это достижимо с помощью метода joinTable
класса Mage_Eav_Model_Entity_Collection_Abstract
. Четвертый параметр определяет условие WHERE
, потому что, по-видимому, вы не можете использовать здесь метод addAttributeToFilter
.
$collection = Mage::getModel('customer/customer')->getCollection();
$collection->addNameToSelect()
->joinTable('newsletter_subscriber', 'customer_id=entity_id', array('subscriber_status'), '{{table}}.subscriber_status=1');
Пожалуйста, дайте мне знать, если что-то неясно.
Вы можете попробовать одну вещь, именно так я делал это раньше.
Запрос к таблице подписчик новостной рассылки и получите идентификатор customer_id, чтобы у вас был идентификатор клиента, затем загрузите данные клиента с этим идентификатором.
Это простой и довольно эффективный способ сделать это.
$newsletterSubscribers = Mage::getResourceModel('newsletter/subscriber_collection')
->addFieldToFilter('subscriber_status', array ('eq' => 1)); // 1 is subscribed
Затем вы можете выполнить итерацию по подписчикам.