
カスタマーコレクションは、ストア管理者に様々なメリットをもたらします。しかし、最も顕著なメリットは、ストアのすべての顧客を属性でフィルタリングできることです。そこで、このチュートリアルでは、Magento 2 で カスタマーコレクションを取得する方法を説明します。
ステップ1:カスタマーオブジェクトの取得
Magento 2 には、オブジェクトを取得するための様々な方法が用意されています。ファクトリー、リポジトリ、オブジェクトマネージャー、ダイレクトインジェクションなどです。好きな方法を使うことができますが、オブジェクトマネージャを使う前には、シンプルではありますが、ベストな方法ではないことを慎重に検討する必要があります。
以下は、customer factoryとcustomer objectを注入するために使用できるラインコード
class MyClass
{
protected $_customer;
protected $_customerFactory;
public function __construct(...
\Magento\Customer\Model\CustomerFactory $customerFactory,
\Magento\Customer\Model\Customer $customers
)
{
...
$this->_customerFactory = $customerFactory;
$this->_customer = $customers;
}
public function getCustomerCollection() {
return $this->_customer->getCollection()
->addAttributeToSelect("*")
->load();
}
public function getFilteredCustomerCollection() {
return $this->_customerFactory->create()->getCollection()
->addAttributeToSelect("*")
->addAttributeToFilter("firstname", array("eq" => "Max"))
-load();
}
}
customerオブジェクトとcustomer factoryの両方を注入することは無意味なことですが、他のオブジェクトを注入する際に参考になる素晴らしいデモンストレーションになります。
最初のメソッドgetCustomerCollection()では、すべての属性を含むすべての顧客のロードされたコレクションが返されます。しかし、このメソッドを使用することは、メモリ制限のため、属性が多すぎる場合には理想的ではありません。
指定されたカスタマー・ファクトリからオブジェクトを取得するには、2番目のメソッドgetFilteredCustomerCollection()を使用します。このメソッドでは、create()を追加するだけで、コレクションをフィルタリングするためのフィルタを追加することもできます。このとき、例えばMaxというファーストネームを持つすべての顧客のコレクションを受け取ることになります。
関連トピック:マジェント2でカスタムブロックを作成する方法
ステップ2:お客様の情報を得る
顧客の詳細を取得するためには、顧客のIDが必要になります。
簡単に説明するために、顧客IDが10であると仮定します。次のコマンドを実行すると、顧客の詳細が表示されます。
$customerID = 10;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerObj = $objectManager->create('Magento\Customer\Model\Customer')
->load($customerID);
$customerEmail = $customerObj->getEmail();
結論
結論として、Magento 2 で customers コレクションを取得することは、複雑な作業ではありません。ブロック、コントローラ、ヘルパー、モデルなど、自分のクラスのすべてのコンストラクトメソッドで行うことができます。最後に、依存性注入を変更する場合は、setup:di:compileを忘れずに行わないと、エラーが発生する可能性があります。PHP Fatal error: Uncaught TypeError: Argument 1 passed to.