Jak wyświetlić listę wszystkich użytkowników

9

W ramach ćwiczenia próbuję wyświetlić listę wszystkich wiadomości e-mail użytkowników z mojej bazy danych na jednej stronie. Jak dotąd najbliżej jest

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

zwroty

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)

ale chcę tylko, aby ich e-maile były wymienione. Próbowałem magicznych pobieraczy i seterów, ale nie powiem (a przynajmniej nie tak, jak ich użyłem). Próbowałem też

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

i

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

i

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

i

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

a także kilka innych odmian, teraz doszedłem do tego, że losowo wpisuję polecenia w nadziei, że zadziałają, czego nie lubię robić.

Jak wyświetlić wiadomość e-mail dla wszystkich moich użytkowników? (Mam nadzieję, że nie jestem daleko od celu)

tony09uk
źródło

Odpowiedzi:

19

Właściwie jesteś prawie na miejscu, ale ważne jest, aby wiedzieć, co się dzieje. Jeśli używasz getCollectionmetody, faktycznie budujesz zapytanie. Śmiało i wypróbuj następujące rozwiązania

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

co spowoduje powrót do obserwowania

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

Jest to domyślne zapytanie dotyczące kolekcji klientów. Jak można zauważyć bez określania pól do pobrania, pobiera wszystko. Dodajmy więc pola!

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

Spowoduje to wydrukowanie następującego zapytania

SELECT e. * at_firstname. valueAS firstnameOD customer_entityAS eINNER JOIN customer_entity_varcharAS at_firstnameON ( at_firstname. entity_id= e. entity_id) I ( at_firstname. attribute_id= '5'), w którym ( e. entity_type_id= '1') i (at_firstname.value = 'Sander') ORDER BY e. emailASC

Jak widać kompilacje Magento do poprawiania zapytań w zależności od atrybutów dodawanych do filtrowania, wybierania, porządkowania lub cokolwiek chcesz zrobić. Sprawdź stronę wiki Magento Collection, aby uzyskać więcej informacji na temat kolekcji, ponieważ istnieje wiele opcji, z których możesz skorzystać.

W twoim przypadku wystarczy określić, addAttributeToSelectaby pobierało tylko to pole. W przypadku kolekcji innych niż EAV stosować addFieldToSelect.

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

foreach ($users as $user)
   var_dump($user->getData());
Sander Mangel
źródło
Dzięki za kod, $ user-> getData ('email') IDEALNY! Przeczytam o tym
tony09uk
1
Wprowadzono małą aktualizację, która może pomóc w eksploracji Magento :)
Sander Mangel