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()
  • 1
    use $orders = $objectManager->create('Magento\Sales\Model\Order')->load($oid); Apr 3 '19 at 6:58
  • This method does not return customer information. So I need collection of it that provides customer information as well Apr 3 '19 at 7:00
  • check my answer just remove getCollection Apr 3 '19 at 7:06
  • Do not use ObjectManager. You can follow this get Order Details using Order id In Magento 2 Jun 26 '20 at 5:59

Just Remove getCollection() :-

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

echo $custLastName= $orders->getCustomerLastname();
  • hi @Rathod, can we get the last itemSku from the order? if the order is placed with one or more sku. Sep 25 '19 at 7:41
  • only last item sku ? Sep 25 '19 at 7:58
  • yes @Rathod, can we get it? Sep 25 '19 at 8:20
  • im not sure but try this $order->getAllItems()->getLastItem() Sep 25 '19 at 8:33
  • No, this will give the last order item, but not the last sku in the particular order Sep 25 '19 at 8:40

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

  /* get Billing details */  

  /* get shipping details */


 /* get  total */

  • I placed this code in a file in a directory called "testcode" at the same level as public_html. Please tell me what should be the path \Magento\Framework\App\ObjectManager::getInstance(); Apr 6 '20 at 21:56

Try this,

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;

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.