Comment répertorier tous les utilisateurs

9

Dans le cadre d'un exercice, j'essaie de répertorier tous les utilisateurs des e-mails de ma base de données sur une seule page. Jusqu'à présent, le plus proche que j'ai

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

Retour

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)

mais je veux seulement que leurs e-mails soient listés J'ai essayé les getters et setters magiques mais noluck (ou du moins pas la façon dont ive les a 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 j'en suis arrivé au point que je colle simplement des commandes au hasard dans l'espoir qu'elles fonctionnent, ce que je n'aime pas faire.

Comment afficher l'e-mail pour tous mes utilisateurs? (J'espère que je ne suis pas loin du but)

tony09uk
la source

Réponses:

19

Vous y êtes presque, mais il est important de savoir ce qui se passe. Si vous utilisez la getCollectionméthode, vous créez 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 à la suite

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

Il s'agit de la requête par défaut pour une collection de clients. Comme vous pouvez le remarquer sans spécifier de champs à récupérer, il récupère tout. Ajoutons donc quelques champs!

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

Cela imprimera la requête suivante

SELECT e. *, at_firstname. valueAS firstnameDE customer_entityAS eINNER JOIN customer_entity_varcharAS at_firstnameON ( 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 BY e. emailASC

Comme vous pouvez le voir, les versions de Magento pour corriger la requête pour vous en fonction des attributs que vous ajoutez pour filtrer, sélectionner, commander ou tout ce que vous voulez faire. Consultez la page wiki de Magento Collection pour en savoir plus sur les collections car il existe BEAUCOUP d'options que vous pouvez utiliser.

Dans votre cas, il vous suffit de spécifier le addAttributeToSelectafin qu'il ne récupère que ce champ. Sur les collections non EAV, utilisez addFieldToSelect.

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

foreach ($users as $user)
   var_dump($user->getData());
Sander Mangel
la source
Merci pour le code, $ user-> getData ('email') PARFAIT! Je vais vous lire à ce sujet
tony09uk
1
A fait une petite mise à jour qui pourrait vous aider dans votre exploration de Magento :)
Sander Mangel