当我们在网上愉快的买买买的时候, 你知道在这些屏幕“背后”正在进行着什么吗?

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

原文链接:http://www.jpdou.top/life-of-a-order-in-magento/

Magento 中一个订单的“生命历程”的更多相关文章

  1. 一个Spark job的生命历程

    一个job的生命历程 dagScheduler.runJob //(1) --> submitJob ( eventProcessLoop.post(JobSubmitted,***) //(2 ...

  2. magento中根据用户的id获取用户的所有订单以及每个订单中的物品 以及物品的相关属性

    本篇文章是对于已经有了magento基础的人而言,在某个模块的额controller中写任意一个函数. public function goodbyeAction() { for ($customer ...

  3. Magento代码之订单创建流程

    Magento代码之订单创建流程         直接看代码吧.下面的代码是如何通过程序创建一个完美订单.        <?php        require_once 'app/Mage. ...

  4. 在magento中如何回复客户的评论

    magento — 在magento中如何回复客户的评论 发表于 2012 年 8 月 18 日 agento本身是不带 回复评论的功能的,现成的扩展(无论免费的还是商业的)也没找到,那就自己写一个吧 ...

  5. Magento中,调用静态块的几种方法

    在后台创建一个order_form静态块Block Title :Order FormIdentifier :order_formStatus :EnabledContent :自定义内容 1.如果要 ...

  6. Magento 中的多个类别的筛选产品集合

    通过在 Magento 中的多个类别的筛选产品集合. 按只 1 类别筛选 Magento 提供筛选器,可以使用直接从该集合的类型: $_category = Mage::getModel('catal ...

  7. magento中的一些技巧

    1.加载某个attribute: $attributeCode=Mage::getModel('catalog/resource_eav_attribute')                     ...

  8. 在magento中定义static block

    在magento中如何调用static block?(系统面板内CMS---->static block) 解答:若想在站点页面的某个地方放点静态的内容,比如广告,或者是促销信息之类的,这样的东 ...

  9. Routing 为 Magento 2 一个重要的部分,本文介绍基本应用

    Routing 为 Magento 2 一个重要的部分,本文介绍基本应用 Magento 2请求的流程 在Magento 2中,请求URL将如下所示: http://example.com/index ...

随机推荐

  1. 杭电acm 1040题

    本题是一个非常简单的升序排序题目,但那时在做的时候把题目看错了,导致花费了大量的时间来检查为什么WA,最后发现题目看错了..... /********************************* ...

  2. 20169219《linux内核原理与分析》第七周作业

    网易云课堂学习 把write系统调用加入到MenuOS里面 我在试验过程中在MenuOS里加入了time.time-asm.write和write-asm命令.以time和time-asm为例, 步骤 ...

  3. SqlDataReader

    using (mycon) { //using语句与try catch finally结合使用 mycon.Open(); // MessageBox.Show("dakai"); ...

  4. linq分页扩展

    直接上代码了 public static List<T> ToPagedList<T>(this IEnumerable<T> allItems, int page ...

  5. 【前端自动化】Gulp的使用(一):安装gulp

    作为一个.NET码农,在前端高速发展的时代,深深感觉自己那么点“前端”技术不够看,比如开发出来的js css等文件庞大,不便于管理,还记得以前的开发就是累加 html  css   jquery, 现 ...

  6. gitlab 502解决方案

    gitlab突然出现502 尝试gitlab-ctl restart.gitlab-ctl reconfigure 无效. 之后做法: #查看git日志 gitlab-ctl tail发现日志报错:端 ...

  7. PHP开源系统学习之fluxbb_2

    谴责下某位同学,转载了我的上一篇文章,也不给个原文地址,希望这次再来转时能加上. //检查登录,在common.php判断 //cookie串: 2|dc4fab5bb354be5104bae0aff ...

  8. win10外接显示器时有些应用和里面的字体显示比较模糊

    打开系统设置 - 选择显示 - 选中外接的显示器 - 点击 "高级缩放设置" 进去后将 "允许 Windows  尝试修改应用,使其不模糊"打开,然后关闭应用再 ...

  9. 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦

    [bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 ​ 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...

  10. ShardingJDBC(一)-转载

    Sharding-JDBC:垂直拆分怎么做? 原创: 尹吉欢 猿天地 今天 经过读写分离的优化后,小王可算是轻松了一段时间,读写分离具体的方案请查看这篇文章:Sharding-JDBC:查询量大如何优 ...