Magento Advent Calender 2017 13日目の記事です。

magentoのmoduleからcustomersのデータを取得してみようと思います。
またCustomerだけでなくOrder・productのデータ同じように取得することができます。

まずこれらのデータを取得するにはCollectionクラスを使用します。
collectionクラスを用いることによりSQL文を書かずにデータを取得することができます。

Collectionクラスはそれぞれ

  • customerデータ「Magento\Customer\Model\ResourceModel\Customer\Collection.php」
  • orderデータ「Magento\Sales\Model\ResourceModel\Order\Collection.php」
  • productデータ「Magento\Catalog\Model\ResourceModel\Product\Collection.php」

にあります。

 

 データを取得する

<?php
namespace Veriteworks\ExportData\Controller\Index;

class Collection extends \Magento\Framework\App\Action\Action{
public function execute(){
$customerCollection = $this->_objectManager->create('Magento\Customer\Model\ResourceModel\Customer\Collection');
}
}

 $customerCollectionにデータ取得できます。

取得するデータをフィルタリングする

特定のデータのみ取得したい場合フィルタリングを行います。

要素の値でフィルタリングを行う場合は AttributeToFillter()を使用します。

メールアドレスが「mail@example.com」のcustomerのみ取得

 $customerCollection = $this->_objectManager->create('Magento\Customer\Model\ResourceModel\Customer\Collection')->addAttributeToFilter('email', 'mail@example.com');

 

 商品名に「pen」が含まれているproductのみ取得

$productCollection = $this->_objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection')->addAttributeToFilter('name', array('like' => '%pen%'));

 

順序を並び替える

データを昇順に並べ替えたい場合は setOrder()を使用します。

Entitiy_idで降順に並び替えたい場合

 $customerCollection = $this->_objectManager->create('Magento\Customer\Model\ResourceModel\Customer\Collection')->setOrder('entity_id', 'DESC');

 

updated_atで降順に並び替えたい場合

 $customerCollection = $this->_objectManager->create('Magento\Customer\Model\ResourceModel\Customer\Collection')->setOrder('updated_at', 'ASC');

 

 要素を取得する

要素を取得するにはそれぞれのgetterメソッドを使用します。

firstNameを取得する

<?php
namespace Veriteworks\ExportData\Controller\Index;

class Collection extends \Magento\Framework\App\Action\Action{
public function execute(){
$customerCollection = $this->_objectManager->create('Magento\Customer\Model\ResourceModel\Customer\Collection');
foreach ($customerCollection as $customer) {
echo $customer->getFirstname() ."<br />";
}
}
}


CustomerのFirstnameが出力されると思います。

まとめ

Collectionクラスを用いてcustomerデータを取得することができました。

SQL文を書かずにとても簡単です。