Как составить список всех пользователей

9

В рамках упражнения я пытаюсь перечислить электронную почту всех пользователей из моей базы данных на одной странице. Пока самое близкое, что у меня есть, это

$user = mage::getModel('customer/customer')->getCollection()->getData();

возвращается

array
0 => 
array
  'entity_id' => string '1' (length=1)
  'entity_type_id' => string '1' (length=1)
  'attribute_set_id' => string '0' (length=1)
  'website_id' => string '1' (length=1)
  'email' => string 'john.doe@example.com' (length=20)
  'group_id' => string '1' (length=1)
  'increment_id' => string '000000001' (length=9)
  'store_id' => string '1' (length=1)
  'created_at' => string '2007-08-30 23:23:13' (length=19)
  'updated_at' => string '2008-08-08 12:28:24' (length=19)
  'is_active' => string '1' (length=1)
  'disable_auto_group_change' => string '0' (length=1)
1 => 
array
  'entity_id' => string '2' (length=1)
  'entity_type_id' => string '1' (length=1)
  'attribute_set_id' => string '0' (length=1)
  'website_id' => string '1' (length=1)
  'email' => string 'tony09uk@gmail.com' (length=18)
  'group_id' => string '1' (length=1)
  'increment_id' => null
  'store_id' => string '1' (length=1)
  'created_at' => string '2013-07-19 14:31:00' (length=19)
  'updated_at' => string '2013-07-19 14:31:00' (length=19)
  'is_active' => string '1' (length=1)
  'disable_auto_group_change' => string '0' (length=1)

но я только хочу, чтобы их электронные письма были в списке, я пробовал магические методы получения и установки, но noluck (или, по крайней мере, не так, как я их использовал). Я также пытался

    $user = mage::getModel('customer/customer')->getCollection()->load();

а также

    $user = mage::getModel('customer/customer')->getCollection()
                                               ->addAttributeToSort('email', 'ASC');

а также

$user = mage::getModel('customer/customer')->getCollection()->getEmail()->getData();

а также

$user = mage::getModel('customer/customer')->getCollection()->getData();
echo $user->getEmail();

а также несколько других вариантов, теперь я дошел до того, что я просто вставляю команды в надежде, что они работают, что я не люблю делать.

Как отобразить электронную почту для всех моих пользователей? (Надеюсь, я не за горами)

tony09uk
источник

Ответы:

19

Вы на самом деле почти там, но важно знать, что происходит. Если вы используете getCollectionметод, вы фактически строите запрос. Идите и попробуйте следующее

$collection = mage::getModel('customer/customer')->getCollection();
var_dump((string)$collection->getSelect());

который вернет вас к следующему

ВЫБРАТЬ e. * ОТ customer_entityКАК eГДЕ ( e. entity_type_id = '1')

Это запрос по умолчанию для коллекции клиентов. Как вы могли заметить, не указывая поля для извлечения, он получает все. Итак, давайте добавим несколько полей!

$collection = mage::getModel('customer/customer')->getCollection()
   ->addAttributeToSelect('email')
   ->addAttributeToFilter('firstname', 'sander')
   ->addAttributeToSort('email', 'ASC');
var_dump((string)$collection->getSelect());

Это напечатает следующий запрос

ВЫБРАТЬ e. * at_firstname. valueКАК firstnameОТ customer_entityAS eINNER JOIN customer_entity_varcharAS at_firstnameON ( at_firstname. entity_id= e. entity_id) И ( at_firstname. attribute_id= '5') где ( e. entity_type_id= '1') и (at_firstname.value = 'шлифовальная') ORDER BY e. emailASC

Как вы можете видеть, сборки Magento корректируют запрос для вас в зависимости от атрибутов, которые вы добавляете в фильтр, выбираете, упорядочиваете или что вы хотите сделать. Посетите вики- страницу Magento Collection, чтобы узнать больше о коллекциях, потому что есть много вариантов, которые вы можете использовать.

В вашем случае вам просто нужно указать, addAttributeToSelectчтобы он только извлекал это поле. На не EAV коллекции использовать addFieldToSelect.

$users = mage::getModel('customer/customer')->getCollection()
           ->addAttributeToSelect('email');

foreach ($users as $user)
   var_dump($user->getData());
Сандер Мангель
источник
Спасибо за код, $ user-> getData ('email') ИДЕАЛЬНО! Я буду читать об этом
tony09uk
1
Сделано небольшое обновление, которое может помочь вам в изучении Magento :)
Сандер Мангель