すべてのユーザーを一覧表示する方法


9

演習の一部として、データベースからのすべてのユーザーのメールを1つのページにリストしようとしています。これまでのところ、私が持っている最も近いものは

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

他のいくつかのバリエーションと同様に、コマンドが機能することを期待してランダムにコマンドを挿入するようになりましたが、これは好きではありません。

すべてのユーザーにメールを表示するにはどうすればよいですか?(私はマークから遠くないことを願っています)

回答:


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

これは次のクエリを出力します

SELECT e。*、 at_firstnamevalueAS firstnameFROM customer_entityAS eINNER JOIN customer_entity_varcharAS at_firstnameON(at_firstnameentity_id= eentity_id)AND(at_firstnameattribute_id= '5')WHERE(eentity_type_id= '1')AND(at_firstname.value = 'sander')ORDER BY eemailASC

ご覧のように、Magentoは、フィルター、選択、順序付け、または何をしたいかに追加する属性に応じて、クエリを修正するようにビルドします。使用できるオプションがたくさんあるので、コレクションの詳細についてはMagento Collection wikiページをチェックしてください。

あなたのケースaddAttributeToSelectでは、そのフィールドのみを取得するようにを指定する必要があります。非EAVコレクションではを使用しますaddFieldToSelect

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

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

コードをありがとう、$ user-> getData( 'email')PERFECT!私はこれについて読みましょう
tony09uk 2013年

1
Magentoの探索に役立つ可能性のある小さな更新を行いました:)
Sander Mangel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.