Comment lister tous les utilisateurs
-
16-10-2019 - |
Question
Dans le cadre d'un exercice que je suis en train de lister tous les utilisateurs e-mail de ma base de données sur une page. Jusqu'à présent, le plus proche que j'ai est
$user = mage::getModel('customer/customer')->getCollection()->getData();
retourne
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)
mais je veux que leurs e-mails à la liste que j'ai essayé la magie accesseurs mais noluck (ou du moins pas la façon dont les ive utilisés). J'ai aussi essayé
$user = mage::getModel('customer/customer')->getCollection()->load();
et
$user = mage::getModel('customer/customer')->getCollection()
->addAttributeToSort('email', 'ASC');
et
$user = mage::getModel('customer/customer')->getCollection()->getEmail()->getData();
et
$user = mage::getModel('customer/customer')->getCollection()->getData();
echo $user->getEmail();
ainsi que plusieurs autres variantes, maintenant je suis arrivé au point que je suis en train de commandes au hasard en tiens dans le l'espoir qu'ils travaillent, que je ne aime pas faire.
Comment puis-je afficher l'e-mail pour tous les utilisateurs? (J'espère que je ne suis pas trop loin de la marque)
La solution
Vous êtes en fait presque là, mais il est important de savoir ce qui se passe.
Si vous en utilisant la méthode de getCollection
vous construisez en fait une requête. Allez-y et essayez ce qui suit
$collection = mage::getModel('customer/customer')->getCollection();
var_dump((string)$collection->getSelect());
qui vous ramènera à suivre
SELECT
e
. * FROMcustomer_entity
ASe
OU (e
.entity_type_id
= '1')
Ceci est la requête par défaut pour une collection de clients. Comme vous le remarquerez sans spécifier les champs pour récupérer il récupère tout. permet donc d'ajouter des champs!
$collection = mage::getModel('customer/customer')->getCollection()
->addAttributeToSelect('email')
->addAttributeToFilter('firstname', 'sander')
->addAttributeToSort('email', 'ASC');
var_dump((string)$collection->getSelect());
imprimera la requête suivante
SELECT
e
. *,at_firstname
.value
ASfirstname
DEcustomer_entity
ASe
INNER JOIN AScustomer_entity_varchar
at_firstname
ON (at_firstname
.entity_id
=e
.entity_id
) ET (at_firstname
.attribute_id
= '5') où (=e
.entity_type_id
'1') et (at_firstname.value = 'ponceuse') ORDER BYe
.
Comme vous pouvez le voir Magento construit à la requête correcte pour vous selon les attributs que vous ajoutez à filtrer, sélectionner, commander ou tout ce que vous voulez faire. Consultez la Collection Magento wiki pour plus sur les collections, car il y a beaucoup d'options que vous pouvez utiliser.
Dans votre cas, il vous suffit de spécifier le addAttributeToSelect
il ne récupère que ce champ. Sur les collections non EAV utilisent addFieldToSelect
.
$users = mage::getModel('customer/customer')->getCollection()
->addAttributeToSelect('email');
foreach ($users as $user)
var_dump($user->getData());