모든 사용자를 나열하는 방법


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)

그러나 나는 그들의 이메일이 나열되기를 원합니다. 매직 게터와 세터를 시도했지만 운이 좋지 않습니다 (또는 적어도 ive가 그들을 사용한 방법은 아닙니다). 나는 또한 시도했다

    $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 ( e. entity_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_firstname. valueAS firstnameFROM customer_entityAS eINNER JOIN는 customer_entity_varcharAS at_firstnameON ( at_firstname. entity_id= e. entity_id) AND ( at_firstname. attribute_id= 5 '') ( e. entity_type_id= '1') AND (at_firstname.value = '샌더') ORDER BY를 e. emailASC

보시다시피 Magento는 필터링, 선택, 순서 또는 수행하려는 작업에 추가하는 속성에 따라 쿼리를 수정하기 위해 빌드합니다. 사용할 수있는 옵션이 많으므로 컬렉션에 대한 자세한 내용 은 Magento Collection 위키 페이지를 확인하십시오 .

귀하의 경우에는 addAttributeToSelect해당 필드 만 검색하도록 지정해야 합니다. 비 EAV 모음에서는을 사용하십시오 addFieldToSelect.

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

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

코드 $ user-> getData ( 'email') PERFECT에 감사드립니다! 나는 이것에 대해 읽을 것이다
tony09uk

1
Magento 탐험에 도움이 될만한 작은 업데이트를 만들었습니다. :)
Sander Mangel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.