Skip to content

Magento 2 Order Creation Process or flow of order creation in magento2 [closed]

This document explains the Magento 2 order process, from adding a product to the cart to
order completion. It includes the data flow and database tables involved at each step.

Step 1: Adding a Product to Cart

When a user adds a product to the cart, Magento creates or retrieves an existing quote.
Database Tables Used:

1.​ quote – Stores cart details (unique quote_id, customer info, etc.)

2.​ quote_item – Stores products added to the cart

3.​ quote_item_option – Stores configurable/bundle/custom options

Process Flow:

1.​ If the user is logged in and has an active cart, Magento fetches the existing quote.

2.​ If no active cart exists, a new quote is created.

3.​ The product details are stored in quote_item.

4.​ If the product has custom options, they are stored in quote_item_option.

Example SQL Queries:

Retrieve active cart for a customer:​

SELECT * FROM quote WHERE customer_id = 1;

Retrieve items in the cart:​

SELECT * FROM quote_item WHERE quote_id = 123;

Step 2: Proceeding to Checkout

When the user proceeds to checkout, Magento stores shipping and billing information.
Database Tables Used:

1.​ quote_address – Stores billing/shipping addresses

2.​ quote_payment – Stores selected payment method

Process Flow:

1.​ User enters billing and shipping details, which are stored in quote_address.

2.​ Magento saves the selected payment method in quote_payment.

3.​ Magento calculates the total amount (subtotal, grand_total, tax, shipping, etc.).

Example SQL Queries:

Get the shipping and billing address:​

SELECT * FROM quote_address WHERE quote_id = 123;

Get the payment method:​

SELECT * FROM quote_payment WHERE quote_id = 123;

Step 3: Placing the Order

When the user confirms the order, Magento converts the quote into a sales order.
Data Transfer from quote to sales_* Tables:

Process Flow:

1.​ Magento creates a new entry in sales_order.

2.​ Copies quote_item data to sales_order_item.

3.​ Copies quote_address to sales_order_address.

4.​ Copies quote_payment to sales_order_payment.

5.​ The quote is marked as inactive.

Example SQL Queries:

Retrieve the order created from a quote:​

SELECT * FROM sales_order WHERE quote_id = 123;

Retrieve ordered items:​

SELECT * FROM sales_order_item WHERE order_id = 456;

Retrieve order payment details:​

SELECT * FROM sales_order_payment WHERE order_id = 456;

Step 4: Payment Processing & Order Status Updates

Magento processes the payment and updates the order status.Database Tables Used:

1.​ sales_payment_transaction – Stores transaction details (e.g., PayPal, Stripe)

2.​ sales_order_status_history – Stores order status changes

Process Flow:

1.​ Magento integrates with the selected payment gateway.

2.​ A transaction record is stored in sales_payment_transaction.

3.​ The order status updates in sales_order_status_history (e.g., pending →
processing).

Example SQL Queries:

Retrieve payment transaction details:​

SELECT * FROM sales_payment_transaction WHERE order_id = 456;

Check order status history:​

SELECT * FROM sales_order_status_history WHERE order_id = 456;

Step 5: Shipping & Order Completion

Once payment is completed, Magento processes shipping and marks the order as complete.
Database Tables Used:

1.​ sales_shipment – Stores shipment details

2.​ sales_shipment_item – Stores shipped items

3.​ sales_invoice – Stores invoice details

4.​ sales_invoice_item – Stores invoiced items

Process Flow:

1.​ Magento generates an invoice (sales_invoice & sales_invoice_item).

2.​ The store ships the product, creating an entry in sales_shipment.

3.​ Once shipped, the order status changes to Complete (complete).Example SQL Queries:

Retrieve invoice details:​

SELECT * FROM sales_invoice WHERE order_id = 456;

Retrieve shipment details:​

SELECT * FROM sales_shipment WHERE order_id = 456;

Getting Cart Data in PHTML

Use the following code in your .phtml file to get cart data:

$objectManager = MagentoFrameworkAppObjectManager::getInstance();
$cart = $objectManager->get('MagentoCheckoutModelCart');
$items = $cart->getQuote()->getAllItems();
foreach ($items as $item) {
echo 'ID: '.$item->getProductId().'<br />';
echo 'Name: '.$item->getName().'<br />';
echo 'Quantity: '.$item->getQty().'<br />';
echo 'Price: '.$item->getPrice().'<br /><br />';
}

Getting Order Data in PHTML

To get order data by order ID:

$objectManager = MagentoFrameworkAppObjectManager::getInstance();$order = $objectManager->create('MagentoSalesModelOrder')->load(456);
echo 'Order ID: ' . $order->getIncrementId();
echo 'Grand Total: ' . $order->getGrandTotal();
foreach ($order->getAllVisibleItems() as $item) {
echo 'Product Name: ' . $item->getName();
}

Final Summary: Step-by-Step Order Flow

1️⃣ User adds a product to cart → Data stored in quote, quote_item, quote_item_option.

2️⃣ User proceeds to checkout → Data stored in quote_address, quote_payment.

3️⃣ User places an order → Data moved from quote_* to sales_* tables.

4️⃣ Payment is processed → Data stored in sales_payment_transaction.

5️⃣ Order is shipped → Data stored in sales_shipment, sales_invoice.

6️⃣ Order is marked complete → Status updated in sales_order_status_history.