Domanda

Come parte di un esercizio che sto cercando di elencare tutti gli utenti di posta elettronica dalla mia base di dati su una sola pagina. Finora il più vicino che ho è

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

ritorna

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)

, ma voglio solo loro e-mail per essere incluso ho provato i getter e setter magici ma noluck (o almeno non il modo in cui li ive usati). Ho anche provato

    $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();

così come diverse altre varianti, ora ho ottenuto al punto che sto solo casualmente attaccando comandi nella speranza che lavorano, che non mi piace fare.

Come faccio a visualizzare la posta elettronica per tutti i miei utenti? (Spero che io non sono al lontano il marchio)

È stato utile?

Soluzione

Sei in realtà quasi lì, ma è importante sapere che cosa sta accadendo. Se si utilizza il metodo getCollection si sta effettivamente costruendo una query. Vai avanti e provare quanto segue

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

, che si tornerà alla seguente

Seleziona e. * FROM customer_entity AS e WHERE (e.entity_type_id = '1')

Questa è la query di default per una collezione cliente. Come si può notare senza specificare i campi per recuperare recupera tutto. Quindi, consente di aggiungere alcuni campi!

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

Questo stamperà la seguente query

Seleziona e. *, at_firstname.value COME DA firstname customer_entity AS e INNER JOIN customer_entity_varchar AS at_firstname ON (at_firstname.entity_id = e.entity_id) E (at_firstname.attribute_id = '5') WHERE (e.entity_type_id = '1') e (at_firstname.value = 'Sander') ORDER BY e.email ASC

Come si può vedere Magento costruisce alla domanda corretta per voi a seconda degli attributi si aggiunge al filtro, selezionare, ordinare o quello che volete fare. Controlla la Magento Collection wiki pagina per più su collezioni, perché ci sono un sacco di opzioni che è possibile utilizzare.

Nel tuo caso si solo bisogno di specificare il modo addAttributeToSelect recupera solo quel campo. Su non EAV collezioni utilizzano addFieldToSelect.

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

foreach ($users as $user)
   var_dump($user->getData());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top