I am looking for a code sample on how to get order history by customer email
This is the code I am working with ATM:
public function __construct( \Magento\Customer\Model\CustomerRegistry $customerRegistry, \Magento\Backend\Block\Template\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig ) { $this->customerRegistry = $customerRegistry; $this->_scopeConfig = $scopeConfig; $this->adminUser = $this->_scopeConfig->getValue('customer_order_api_control/apioptions/api_user', \Magento\Store\Model\ScopeInterface::SCOPE_STORE); $this->adminPassword= $this->_scopeConfig->getValue('customer_order_api_control/apioptions/api_password', \Magento\Store\Model\ScopeInterface::SCOPE_STORE); $this->storeManager = $storeManager; $this->orderFactory = $orderFactory; $this->baseUrl = $this->storeManager->getStore()->getBaseUrl(); $this->restUrl = $this->baseUrl . '/index.php/rest/V1/'; } public function getOrders($customerId) { /*$customerModel = $this->customerRegistry->retrieve($customerId); return $customerModel->getDataModel();*/ /*$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); // Instance of object manager $resource = $objectManager->get('Magento\Framework\App\ResourceConnection'); $connection = $resource->getConnection(); $tableName = $resource->getTableName('customer_entity');*/ $orderFactory->getSalesOrderCollection(array('email'=>$customerId)); $sql = "SELECT email FROM " . $tableName . " WHERE entity_id = '".$customerId."'"; $email = $connection->fetchOne($sql); $orders = array(); if (!empty($email)) { $orders = $this->getOrdersByEmail($email); } $orders = json_encode($orders); return $orders; }
Hey RonBongo,
You can try this logic:
<?php protected $_orderFactory; public function __construct( ..... \Magento\Sales\Model\OrderFactory $orderFactory ..... ) { ... $this->_orderFactory = $orderFactory; .... } // Customer email as a parementer of method public function getOrders($customerEmail) { //Retrieve all orders with this email address $orders = $this->_orderFactory->create() ->getCollection() ->addFieldToFilter('customer_email', $customerEmail); //Retrieve all order ids $orderIds = $order->getAllIds(); }
Kind of the same logic is used in our Advanced Reviews and Reminders module for Magento 1.
Regards,
Plumrocket Team
Thanks!
This was helpful. I ended up doing something similar.
I am going to encode the output as this is an API.
Do you know if there is an easy way to re-use the method magento 2 uses with the admin API?
This is to work the same way but within the customer context.