Magento 中一个订单的“生命历程”
当我们在网上愉快的买买买的时候, 你知道在这些屏幕“背后”正在进行着什么吗?
1. 当一个产品被加入到购物车后, 实际上发生了什么?
当第一个产品被加入到购物车, 系统首先会生成一个 quote (quote翻译过来就是“报价单”), 然后把刚才的产品当作一个 quote_item 也一起保存在数据库中, quote 和 quote_item 之间的关系相当于父母和子女的关系, 可以通过 quote 获取所有相关的 quote_item, 也可以通过 quote_item 获取相关的 quote.
虽然 quote_item 是由产品转化而来的,但是 quote_item 和产品是完全不同的数据模型. Magento 中, 产品所有数据保存在 catalog_product_entity, catalog_product_entity_varchar, catalog_product_entity_int, catalog_product_entity_text, catalog_product_entity_detetime 等表中, 而 quote_item 的数据保存在 sales_flat_quote_item 和 sales_flat_quote_item_option 表中.
因为 quote_item 是由产品转化而来的,所以可以通过 quote_item 来获取相关产品, 但是一个产品的属性特别多, 很多属性对于前端来说是不必要的, 所以 Magento 在配置文件中规定了通过 quote_item 获取的产品的属性. 在开发Magento的时候,在 quote_item->getProduct() 获取不到产品属性值的情况, 多数是因为没有将该产品属性加入配置文件导致的.
2. 当在购物车中编辑产品数量时,实际上发生了什么?
购物车里的产品实际上是 quote 中的 quote_item, 所以在购物车里编辑产品数量, 相当于修改 quote_item 的“数量”这个属性, 而且编辑购车中产品的数量不会影响正真产品的库存。
3. 当点击进行“立即下单”的时候,实际上发生了什么?
当点击下单时, quote 和所有相关的 quote_item 都会转化为 order 以及 order_item, 原来的 quote 和 quote_item 都会被删除(购物车清空).
order 和 order_item 与 quote 和 quote_item 大多数字段都是一样的, 只是 order 和 order_item 多了一些付款、发货之类的表示状态的字段。
当一个quote转变为order时, 就会根据 quote_item 的“数量”字段值对相关产品的库存进行减操作. 如果产品库存不足, quote 就无法转为 order, 结果就是“下单失败,产品告罄”.
4. 当付款完成时,实际上发生了什么?
刚下单的 order 的状态为 “pengding” (等待中), 当用户付款完成后, order 的状态转变为 “processing”(进行中), 当发货完成,order 的状态转变为 “complete”
从购物车的 quote 到 complete order, 真是一个漫长的过程啊, 中间每一个环节不容有一丝差错, 否则轻则下不了订单,重则付款金额不对, 这是相当严重的bug
如果您觉得阅读本文对您有帮助,欢迎转载本文,但是转载文章之后必须在文章页面明显位置保留此段声明,否则保留追究法律责任的权利。
作 者:www.jpdou.top
Magento 中一个订单的“生命历程”的更多相关文章
- 一个Spark job的生命历程
一个job的生命历程 dagScheduler.runJob //(1) --> submitJob ( eventProcessLoop.post(JobSubmitted,***) //(2 ...
- magento中根据用户的id获取用户的所有订单以及每个订单中的物品 以及物品的相关属性
本篇文章是对于已经有了magento基础的人而言,在某个模块的额controller中写任意一个函数. public function goodbyeAction() { for ($customer ...
- Magento代码之订单创建流程
Magento代码之订单创建流程 直接看代码吧.下面的代码是如何通过程序创建一个完美订单. <?php require_once 'app/Mage. ...
- 在magento中如何回复客户的评论
magento — 在magento中如何回复客户的评论 发表于 2012 年 8 月 18 日 agento本身是不带 回复评论的功能的,现成的扩展(无论免费的还是商业的)也没找到,那就自己写一个吧 ...
- Magento中,调用静态块的几种方法
在后台创建一个order_form静态块Block Title :Order FormIdentifier :order_formStatus :EnabledContent :自定义内容 1.如果要 ...
- Magento 中的多个类别的筛选产品集合
通过在 Magento 中的多个类别的筛选产品集合. 按只 1 类别筛选 Magento 提供筛选器,可以使用直接从该集合的类型: $_category = Mage::getModel('catal ...
- magento中的一些技巧
1.加载某个attribute: $attributeCode=Mage::getModel('catalog/resource_eav_attribute') ...
- 在magento中定义static block
在magento中如何调用static block?(系统面板内CMS---->static block) 解答:若想在站点页面的某个地方放点静态的内容,比如广告,或者是促销信息之类的,这样的东 ...
- Routing 为 Magento 2 一个重要的部分,本文介绍基本应用
Routing 为 Magento 2 一个重要的部分,本文介绍基本应用 Magento 2请求的流程 在Magento 2中,请求URL将如下所示: http://example.com/index ...
随机推荐
- R: matrix & array 生成、操作矩阵、数组:
################################################### 问题:生成.操作矩阵 18.4.27 怎么生成矩阵 matrix.,,及其相关操作 ??? ...
- MapperScan的工作,Spring-Mybatis怎么自动getMapper
@MapperScan @Import(MapperScannerRegistrar.class) @Repeatable(MapperScans.class) public @interface M ...
- hdu1085
#include <iostream> #include <cstring> using namespace std; int n[3],a[9000],b[9000],i,j ...
- hdu 1576 A/B (求逆元)
题目链接 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1). Inpu ...
- C# 将数组转换为以逗号分隔的字符串
例子: string[] array = { "A", "B", "C", "D" }; string str = st ...
- sqlachemy知识点
mysql语句 1.GROUP BY基本语法格式: GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...
- [CentOS7] gzip, bzip2, xz 压缩与解压缩
声明:本文主要总结自:鸟哥的Linux私房菜-第八章.檔案與檔案系統的壓縮,打包與備份,如有侵权,请通知博主 gzip命令: 选项参数: -c :将压缩后的数据显示到屏幕上,可以用于重定向: -d : ...
- [Django笔记] models 深入学习
对着官方文档撸一遍,顺便做点笔记 models 定义了本应用的数据库表结构.底层可以由不同的数据库封装实现,因为不同的数据库字段类型不一样,因此,跟以往直接用单一数据库(如mysql)建立的应用有很大 ...
- 51nod1035(循环节)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035 题意:中文题诶- 思路:求满足 10^k=1(mod ...
- ligerUI弹出框
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...