Cómo enumerar todos los usuarios

9

Como parte de un ejercicio, estoy tratando de enumerar todos los correos electrónicos de los usuarios de mi base de datos en una página. Hasta ahora, lo más cerca que tengo es

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

devoluciones

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)

pero solo quiero que sus correos electrónicos aparezcan en la lista. He probado los captadores y setters mágicos, pero nada (o al menos no la forma en que los he usado). También he intentado

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

y

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

y

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

y

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

así como varias otras variaciones, ahora he llegado al punto de que solo estoy ingresando comandos al azar con la esperanza de que funcionen, lo que no me gusta hacer.

¿Cómo visualizo el correo electrónico para todos mis usuarios? (Espero no estar muy lejos de la marca)

tony09uk
fuente

Respuestas:

19

En realidad ya casi estás allí, pero es importante saber qué está pasando. Si usa el getCollectionmétodo, en realidad está creando una consulta. Sigue adelante y prueba lo siguiente

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

que te devolverá a seguir

SELECT e. * FROM customer_entityAS eDONDE ( e. entity_type_id = '1')

Esta es la consulta predeterminada para una colección de clientes. Como puede observar sin especificar campos para recuperarlo, recupera todo. ¡Entonces agreguemos algunos campos!

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

Esto imprimirá la siguiente consulta

SELECT e*., at_firstname. valueA PARTIR firstnameDE customer_entityCOMO eINTERIOR ÚNASE customer_entity_varcharCOMO at_firstnameEN ( at_firstname. entity_id= e. entity_id) Y ( at_firstname. attribute_id= '5') DONDE ( e. entity_type_id= '1') Y (at_firstname.value = 'sander') ORDENAR POR e. emailASC

Como puede ver, las compilaciones de Magento corrigen la consulta para usted según los atributos que agregue para filtrar, seleccionar, ordenar o lo que desee hacer. Echa un vistazo a la página wiki de Magento Collection para obtener más información sobre colecciones porque hay MUCHAS opciones que puedes usar.

En su caso, solo necesita especificar el addAttributeToSelectpara que solo recupere ese campo. En el uso de colecciones no EAV addFieldToSelect.

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

foreach ($users as $user)
   var_dump($user->getData());
Sander Mangel
fuente
Gracias por el código, $ user-> getData ('email') ¡PERFECTO! Leeré sobre esto
tony09uk
1
Hice una pequeña actualización que podría ayudarlo a explorar Magento :)
Sander Mangel