以下是 Magento 2 访客下单全流程的数据库表执行流程图,展示了从添加商品到购物车到支付完成的完整过程:

详细流程说明:
- 添加商品到购物车:
quote
表:创建购物车主记录(is_active=1
,customer_id=NULL
)quote_item
表:添加购物车商品项(qty
,price
等)quote_id_mask
表:生成访客购物车唯一标识(用于前后端关联)
- 添加地址:
quote_address
表:写入配送地址(address_type=shipping
)和账单地址(address_type=billing
)- 触发税费计算更新
tax_order_aggregated_created
等税务相关表
- 选择配送方式:
quote_shipping_rate
表:存储可选的配送方式及费用- 更新
quote_address
中的运费金额(shipping_amount
)
- 选择支付方式:
quote_payment
表:存储支付方法(如checkmo
)和支付详情- 更新
quote
表中的支付状态(payment
字段)
- 下单支付:
sales_order
表:创建订单主记录(increment_id
生成订单号)sales_order_address
表:从 quote_address 复制地址数据sales_order_item
表:从 quote_item 复制商品数据sales_order_payment
表:从 quote_payment 复制支付数据
- 库存更新:
cataloginventory_stock_item
表:扣减库存数量(qty
字段)cataloginventory_stock_status
表:更新库存状态
- 订单后处理:
sales_invoice
表:生成发票记录(如配置自动开票)sales_order_status_history
表:记录订单状态变更email
相关表:发送订单确认邮件
关键转换点:

重要字段说明:
- quote 表:
is_active=1
:购物车有效状态converted_at
:订单生成时间(下单后更新)reserved_order_id
:预占订单号
- sales_order 表:
status
:订单状态(pending/processing 等)state
:订单工作流状态customer_id
:NULL(访客订单)
- 状态生命周期:

访客订单特殊处理:
- 无用户关联:
customer_id
在 quote/sales_order 中均为 NULL- 使用
customer_email
字段存储邮箱地址
- 购物车保留:
- 下单后
quote.is_active
设为 0(非删除) - 系统 cron 定期清理过期购物车
- 下单后
- 订单查看:
- 通过订单号和账单邮箱验证身份
- 数据存储在
sales_order
而非客户订单历史