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

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. JAVA基础知识总结3(面向对象)

    特点:过程其实就是函数:对象是将函数等一些内容进行了封装 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在人们思考习惯的一种思想. 匿名对象 ...

  2. [hdu1176]免费馅饼(数塔dp)

    题意:中文题,不解释了 = = 解题关键:逆推,转化为数塔dp就可以了 dp[i][j]表示在i秒j位置的最大值. 转移方程:$dp[i][j] = \max (dp[i + 1][j],dp[i + ...

  3. windows、Linux 测试服务器、电脑的某些个端口是否打开

    测试远程端口是否开放包括两种方法: 一. 命令行的形式 二.代码 先参考我的博客 windows.Linux 开放端口 一.命令行的形式 两个命令:telnet.nc(netcat) 两种网络层协议: ...

  4. centos MAC 地址与报错eth0 unknown interface no such device

    eth0 unknown interface no such device 出现这个原因是由于虚拟机直接COPY过来,MAC地址发生了变化,但eth0 里仍然记录着旧的MAC地址. 解决方法: vim ...

  5. Unity3D 脚本模板修改方法

    默认情况下,在Unity中创建C#脚本都会默认生成以下代码模板. using System.Collections; using System.Collections.Generic; using U ...

  6. 树莓派配置(一):打开SPI

    1.树莓派默认SPI关闭,在进行编程前需要打开SPI cd /boot/ sudo vi config.txt 将#dtparam=spi=off 改成:dtparam=spi=on 重启 sudo ...

  7. 洛谷P2119 魔法阵

    P2119 魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法值,我们用Xi表示编 ...

  8. 洛谷P1098 字符串的展开

    P1098 字符串的展开 题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输 ...

  9. bzoj2132: 圈地计划(最小割)

    传送门 看来以后见到矩形就要黑白染色冷静一下了…… 首先,如果它的要求时候相邻的选择相同,那么就是和这一题一样了->这里 然后考虑不同的要怎么做 那就把矩形黑白染色一下吧 然后令其中一种颜色的A ...

  10. 讲完.class,Class之后,继续。

    讲完.class,Class之后,继续. 1)泛化的Class引用 Class也可以加入泛型,加入之后会进行类型检查. 贴一下书上原话,Class<?>优于Class,虽然他们是等价的,C ...