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); Commented Apr 3, 2019 at 6:58
  • This method does not return customer information. So I need collection of it that provides customer information as well Commented Apr 3, 2019 at 7:00
  • check my answer just remove getCollection Commented Apr 3, 2019 at 7:06
  • Do not use ObjectManager. You can follow this get Order Details using Order id In Magento 2 Commented Jun 26, 2020 at 5:59

3 Answers 3


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. Commented Sep 25, 2019 at 7:41
  • only last item sku ? Commented Sep 25, 2019 at 7:58
  • yes @Rathod, can we get it? Commented Sep 25, 2019 at 8:20
  • im not sure but try this $order->getAllItems()->getLastItem() Commented Sep 25, 2019 at 8:33
  • No, this will give the last order item, but not the last sku in the particular order Commented Sep 25, 2019 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(); Commented Apr 6, 2020 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 and acknowledge you have read our privacy policy.

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