Como listar todos os usuários

9

Como parte de um exercício, estou tentando listar todos os emails de usuários do meu banco de dados em uma página. Até agora, o mais próximo que eu tenho é

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

retorna

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 '[email protected]' (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 '[email protected]' (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)

mas eu só quero que seus e-mails sejam listados. Tentei os getters e setters mágicos, mas noluck (ou pelo menos não da maneira como os usei). Eu também tentei

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

e

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

e

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

e

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

assim como várias outras variações, agora cheguei ao ponto de que estou apenas colocando comandos aleatoriamente na esperança de que funcionem, o que não gosto de fazer.

Como exibo o email para todos os meus usuários? (Espero não estar muito longe da verdade)

tony09uk
fonte

Respostas:

19

Você está quase chegando, mas é importante saber o que está acontecendo. Se você estiver usando o getCollectionmétodo, está criando uma consulta. Vá em frente e tente o seguinte

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

que o levará a seguir

SELECCIONAR e. * DE customer_entityAS eONDE ( e. entity_type_id = '1')

Esta é a consulta padrão para uma coleção de clientes. Como você pode notar, sem especificar os campos para recuperá-lo, recupera tudo. Então, vamos adicionar alguns campos!

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

Isso imprimirá a seguinte consulta

SELECT e. * at_firstname,. valueAS firstnameDE customer_entityAS eINNER JOIN customer_entity_varcharCOMO at_firstnameEM ( at_firstname. entity_id= e. entity_id) E ( at_firstname. attribute_id= '5') em que ( e. entity_type_id= '1') E (at_firstname.value = 'lixadeira') POR ORDEM e. emailASC

Como você pode ver, o Magento cria para corrigir a consulta, dependendo dos atributos que você adiciona ao filtro, seleção, ordem ou o que você deseja fazer. Confira a página wiki do Magento Collection para obter mais informações sobre coleções, porque existem muitas opções que você pode usar.

No seu caso, você só precisa especificar o campo addAttributeToSelectpara que ele recupere apenas esse campo. Em coleções que não sejam EAV, use addFieldToSelect.

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

foreach ($users as $user)
   var_dump($user->getData());
Sander Mangel
fonte
Obrigado pelo código, $ user-> getData ('email') PERFEITO! Vou ler sobre isso
tony09uk 4/13/13
11
Fez uma pequena atualização que pode ajudá-lo em sua exploração de Magento :)
Sander Mangel