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.