客户收集是为商店管理员提供了各种好处。但最显着的优点是它允许您按属性过滤商店的所有客户。因此,在本教程中,我将指导您如何在 Magento 2 中编程方式获取客户集合

如何通过两步获取客户集合:

  • 第 1 步:获取客户对象
  • 第 2 步:获取客户详细信息

步骤1:获取客户对象

Magento 提供了各种方法来帮助您获取对象,例如从工厂、存储库、通过对象管理器获取或直接注入它。您可以使用任何您喜欢的方法,但是在使用对象管理器之前您应该仔细考虑,虽然它很简单,但它不是最好的方法。

下面是可用于注入客户工厂和客户对象的行代码。

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

尽管同时注入客户对象和客户工厂可能毫无意义,但这将是一个很好的演示,供您在注入其他对象时参考。

使用第一种方法getCustomerCollection(),返回所有客户的加载集合,包括所有属性。但是,如果由于内存限制而具有太多属性,则使用此方法并不是一个好主意。

要从给定的客户工厂获取对象,getFilteredCustomerCollection()请应用第二种方法。使用这种方法,您只需要添加create(),您还可以添加过滤器来过滤您的集合。此时,您将收到所有具有名字的客户的集合,例如 Max。

第 2 步:获取客户详细信息

为了获取客户的详细信息,您将需要他们的 ID,因为客户集合需要按客户 ID 加载。

为了更容易理解,假设客户 ID 为 10。您将通过运行以下命令获取客户详细信息:

$customerID = 10;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerObj = $objectManager->create('Magento\Customer\Model\Customer')
->load($customerID);
$customerEmail = $customerObj->getEmail();