如何列出所有用户


9

作为练习的一部分,我试图在一页上列出我数据库中所有用户的电子邮件。到目前为止,我最接近的是

$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)

但是我只希望列出他们的电子邮件,但我尝试过使用吸气剂和塞洗剂,但是却没有办法(或者至少不是我使用它们的方式)。我也尝试过

    $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();

以及其他几种变体,现在我要说的是,我只是随意添加命令以希望它们能起作用,我不喜欢这样做。

如何为所有用户显示电子邮件?(我希望我离目标不远)

Answers:


19

您实际上快要到那里了,但是了解发生的事情很重要。如果使用该getCollection方法,则实际上是在构建查询。继续尝试以下

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

这将使您回到关注

SELECT e* FROM customer_entityAS eWHERE( eentity_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. valueAS firstnameFROM customer_entityAS eINNER JOIN customer_entity_varcharAS at_firstnameON( at_firstnameentity_id= eentity_id)AND( at_firstnameattribute_id= '5'),其中(eentity_type_id= '1')和(at_firstname.value = '砂光机')ORDER BY eemailASC

如您所见,Magento会根据您添加到过滤,选择,订购或想要执行的操作的属性来为您纠正查询。请查看Magento集合Wiki页面以获取有关集合的更多信息,因为您可以使用很多选项。

在您的情况下,您只需指定即可,addAttributeToSelect因此它仅检索该字段。在非EAV集合上使用addFieldToSelect

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

foreach ($users as $user)
   var_dump($user->getData());

感谢您的代码,$ user-> getData('email')完美!我将对此进行阅读
tony09uk 2013年

1
进行了一些更新,可能会帮助您探索Magento :)
Sander Mangel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.