Question

I am trying to get order collection by order id in Magento 2.

Here is my code:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$orders = $objectManager->create('Magento\Sales\Model\Order')->getCollection()->load($oid);

echo $custLastName= $orders->getCustomerLastname();

But its is giving fatal error:

 Call to undefined method Magento\Sales\Model\ResourceModel\Order\Collection::getCustomerLastname()
Was it helpful?

Solution

Just Remove getCollection :-

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$orders = $objectManager->create('Magento\Sales\Model\Order')->load($oid);

echo $custLastName= $orders->getCustomerLastname();

OTHER TIPS

The Following code will easily get Customer details, Billing, Shipping and order totals

  $orderId = 1222;
  $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
  $order = $objectManager->create('\Magento\Sales\Model\OrderRepository')->get($orderId);

  /*get customer details*/

  $custLastName= $orders->getCustomerLastname();
  $custFirsrName= $orders->getCustomerFirstname();
  $ipaddress=$order->getRemoteIp();
  $customer_email=$order->getCustomerEmail();
  $customerid=$order->getCustomerId();

  /* get Billing details */  
  $billingaddress=$order->getBillingAddress();
  $billingcity=$billingaddress->getCity();      
  $billingstreet=$billingaddress->getStreet();
  $billingpostcode=$billingaddress->getPostcode();
  $billingtelephone=$billingaddress->getTelephone();
  $billingstate_code=$billingaddress->getRegionCode();

  /* get shipping details */

  $shippingaddress=$order->getShippingAddress();        
  $shippingcity=$shippingaddress->getCity();
  $shippingstreet=$shippingaddress->getStreet();
  $shippingpostcode=$shippingaddress->getPostcode();      
  $shippingtelephone=$shippingaddress->getTelephone();
  $shippingstate_code=$shippingaddress->getRegionCode();

 /* get  total */

  $tax_amount=$order->getTaxAmount();
  $total=$order->getGrandTotal();

Try this,

<?php                                                                 
namespace Vendor\Module\Controller\Orders;                                
class ReadOrders extends \Magento\Framework\App\Action\Action                 
{
public function __construct(
 \Magento\Framework\App\Action\Context $context,
 \Magento\Sales\Api\OrderRepositoryInterface $orderRepo
) {
   $this->orderRepo = $orderRepo;
   parent::__construct($context);
}

public function execute()
{
   $entity_id = '12'; // its called increment id
   $order = $this->orderRepo->get($entity_id);
   echo $order->getCustomerId();
   echo $order->getCustomerFirstname();
   echo $order->getCustomerEmail();

}
}

Don't use object manager anywhere and you can use the above code in block or helper anywhere to get the collection.

Hope this helps.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top