Получение коллекции клиентов только с теми, кто подписан на информационные бюллетени


Мне нужно импортировать множество клиентов в стороннюю почтовую компанию, но мне нужно импортировать только тех, кто в настоящее время подписан на рассылку новостей. Сам импорт должен быть файлом сведений о клиенте, который мне нужно сгенерировать. Я знаю, что мог бы загрузить всех клиентов в коллекцию и перебирать их, вставляя только те, которые подписаны в файл импорта, но поскольку у нас более 90000 клиентов, я бы предпочел просто загрузить тех, которые подписаны в коллекция. Сам импорт использует API, но для этого необходимо добавить файл импорта в качестве вложения (это нормально, просто включите его для информации).

Есть идеи?

Author: Marius, 2013-05-24

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');

Пожалуйста, дайте мне знать, если что-то неясно.

 6
Author: user487772, 2013-05-24 11:34:29

Вы можете попробовать одну вещь, именно так я делал это раньше.

Запрос к таблице подписчик новостной рассылки и получите идентификатор customer_id, чтобы у вас был идентификатор клиента, затем загрузите данные клиента с этим идентификатором.

 0
Author: Mufaddal, 2013-05-24 08:56:12

Это простой и довольно эффективный способ сделать это.

$newsletterSubscribers = Mage::getResourceModel('newsletter/subscriber_collection')
        ->addFieldToFilter('subscriber_status', array ('eq' => 1)); // 1 is subscribed

Затем вы можете выполнить итерацию по подписчикам.

 0
Author: Willster, 2018-06-26 13:29:21