Вопрос

В рамках упражнения я пытаюсь перечислить все пользователи по электронной почте из моей базы данных на одной странице. Пока ближе всего, что у меня есть

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

возврат

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)

Но я только хочу, чтобы их электронные письма были перечислены, я попробовал волшебные добычи и сеттеры, но noluck (или, по крайней мере, не то, как я их использовал). Я также попробовал

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

а также

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

а также

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

а также

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

Помимо нескольких других вариаций, теперь я дошел до того, что я просто случайно встаю команды в надежде, что они работают, что мне не нравится.

Как отобразить электронное письмо для всех моих пользователей? (Я надеюсь, что я не буду далеко от следа)

Это было полезно?

Решение

Вы на самом деле почти там, но важно знать, что происходит. Если вы используете getCollection Метод, который вы на самом деле создаете запрос. Давай и попробуй следующее

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

который вернет вас к следующему

ВЫБРАТЬ e.* ИЗ customer_entity В КАЧЕСТВЕ e КУДА (e.entity_type_id = '1')

Это запрос по умолчанию для коллекции клиентов. Как вы могли бы заметить, не указав поля, чтобы извлечь его для всех. Итак, давайте добавим несколько полей!

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

Это распечатает следующий запрос

ВЫБРАТЬ e.*, at_firstname.value В КАЧЕСТВЕ firstname ИЗ customer_entity В КАЧЕСТВЕ e ВНУТРЕННЕЕ СОЕДИНЕНИЕ customer_entity_varchar В КАЧЕСТВЕ at_firstname НА (at_firstname.entity_id = e.entity_id) А ТАКЖЕ (at_firstname.attribute_id = '5') где (e.entity_type_id = '1') и (at_firstname.value = 'sander') порядок по e.email АСС

Как вы можете видеть, Magento сборка для исправления запроса для вас в зависимости от атрибутов, которые вы добавляете в фильтр, выберите, заказывайте или что хотите. Проверьте Magento Collection Wiki Страница для получения дополнительной информации о коллекциях, потому что есть много вариантов, которые вы можете использовать.

В вашем случае вам просто нужно указать addAttributeToSelect Так что это только извлекает это поле. В коллекциях без EAV addFieldToSelect.

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

foreach ($users as $user)
   var_dump($user->getData());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top