以下是 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而非客户订单历史