/** * Load search results * * @return $this */ public function load() { $result = []; if (!$this->hasStart() || !$this->hasLimit() || !$this->hasQuery()) { $this->setResults($result); return $this; } $this->searchCriteriaBuilder->setCurrentPage($this->getStart()); $this->searchCriteriaBuilder->setPageSize($this->getLimit()); $searchFields = ['firstname', 'lastname', 'company']; $filters = []; foreach ($searchFields as $field) { $filters[] = $this->filterBuilder->setField($field)->setConditionType('like')->setValue($this->getQuery() . '%')->create(); } $this->searchCriteriaBuilder->addFilters($filters); $searchCriteria = $this->searchCriteriaBuilder->create(); $searchResults = $this->customerRepository->getList($searchCriteria); foreach ($searchResults->getItems() as $customer) { $customerAddresses = $customer->getAddresses(); /** Look for a company name defined in default billing address */ $company = null; foreach ($customerAddresses as $customerAddress) { if ($customerAddress->getId() == $customer->getDefaultBilling()) { $company = $customerAddress->getCompany(); break; } } $result[] = ['id' => 'customer/1/' . $customer->getId(), 'type' => __('Customer'), 'name' => $this->_customerViewHelper->getCustomerName($customer), 'description' => $company, 'url' => $this->_adminhtmlData->getUrl('customer/index/edit', ['id' => $customer->getId()])]; } $this->setResults($result); return $this; }
/** * Test ordering * * @magentoDataFixture Magento/Customer/_files/three_customers.php * @magentoDbIsolation enabled */ public function testSearchCustomersOrder() { /** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchBuilder */ $objectManager = Bootstrap::getObjectManager(); $searchBuilder = $objectManager->create('Magento\\Framework\\Api\\SearchCriteriaBuilder'); // Filter for 'firstname' like 'First' $filterBuilder = $objectManager->create('Magento\\Framework\\Api\\FilterBuilder'); $firstnameFilter = $filterBuilder->setField('firstname')->setConditionType('like')->setValue('First%')->create(); $searchBuilder->addFilters([$firstnameFilter]); // Search ascending order $sortOrderBuilder = $objectManager->create('Magento\\Framework\\Api\\SortOrderBuilder'); $sortOrder = $sortOrderBuilder->setField('lastname')->setDirection(SearchCriteriaInterface::SORT_ASC)->create(); $searchBuilder->addSortOrder($sortOrder); $searchResults = $this->customerRepository->getList($searchBuilder->create()); $this->assertEquals(3, $searchResults->getTotalCount()); $this->assertEquals('Lastname', $searchResults->getItems()[0]->getLastname()); $this->assertEquals('Lastname2', $searchResults->getItems()[1]->getLastname()); $this->assertEquals('Lastname3', $searchResults->getItems()[2]->getLastname()); // Search descending order $sortOrder = $sortOrderBuilder->setField('lastname')->setDirection(SearchCriteriaInterface::SORT_DESC)->create(); $searchBuilder->addSortOrder($sortOrder); $searchResults = $this->customerRepository->getList($searchBuilder->create()); $this->assertEquals('Lastname3', $searchResults->getItems()[0]->getLastname()); $this->assertEquals('Lastname2', $searchResults->getItems()[1]->getLastname()); $this->assertEquals('Lastname', $searchResults->getItems()[2]->getLastname()); }
/** * Find a customer * * @param string $attributeValue Attribute Value * @return bool|\Magento\Customer\Api\Data\CustomerInterface */ private function findCustomerByLoginAttribute($attributeValue) { // Retrieve the customer login attribute and check if valid $loginAttribute = $this->advancedLoginConfigProvider->getLoginAttribute(); if (false === $loginAttribute) { return false; } // Add website filter if customer accounts are shared per website $websiteIdFilter = false; if ($this->advancedLoginConfigProvider->getCustomerAccountShareScope() == Share::SHARE_WEBSITE) { $websiteIdFilter[] = $this->filterBuilder->setField('website_id')->setConditionType('eq')->setValue($this->storeManager->getStore()->getWebsiteId())->create(); } // Add customer attribute filter $customerNumberFilter[] = $this->filterBuilder->setField('customer_number')->setConditionType('eq')->setValue($attributeValue)->create(); // Build search criteria $searchCriteriaBuilder = $this->searchCriteriaBuilder->addFilters($customerNumberFilter); if ($websiteIdFilter) { $searchCriteriaBuilder->addFilters($websiteIdFilter); } $searchCriteria = $searchCriteriaBuilder->create(); // Retrieve the customer collection and return customer if there was exactly one customer found $collection = $this->customerRepository->getList($searchCriteria); if ($collection->getTotalCount() == 1) { return $collection->getItems()[0]; } return false; }
/** * @return \Magento\Customer\Api\Data\CustomerInterface[] */ public function getAllCustomers() { $crit = $this->_manObj->create(\Magento\Framework\Api\SearchCriteriaInterface::class); /** @var \Magento\Customer\Api\Data\CustomerSearchResultsInterface $all */ $all = $this->_repoCust->getList($crit); $result = $all->getItems(); return $result; }