Come elencare tutti gli utenti
-
16-10-2019 - |
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)
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
. * FROMcustomer_entity
ASe
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 DAfirstname
customer_entity
ASe
INNER JOINcustomer_entity_varchar
ASat_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 BYe
.
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());