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 ...
随机推荐
- redis GEO地理位置命令介绍
GEOADD keylongitude latitude member [longitude latitude member ...] Available since 3.2.0. Time comp ...
- JavaScript中的真和假,==和===, 不等
咋JS中,下面这些值表示 “假”: "" (empty string) 0,-0,NaN (invalid number) null, undefined false 除了上面这些 ...
- TMF大数据分析指南 Unleashing Business Value in Big Data(二)
前言 此文节选自TMF Big Data Analytics Guidebook. TMF文档版权信息 Copyright © TeleManagement Forum 2013. All Righ ...
- RedisUtil(未完,持续更新中....)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 洛谷P1083 借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
- 如何使用JDBC Request跨数据库查询后引用查询的结果作为下一个JDBC Request的入参
[前言] 今天来给大家介绍下如何使用JDBC Request跨数据库查询后引用查询的结果作为下一个JDBC Request的入参! 因为我现在所测的系统模块中部分表在不同的数据库中,所以在用JDBC ...
- Python 软件热更新
Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...
- Git Remote (转)
基本使用 git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote. 直接clone一个仓库: $: git clone git@search.ued. ...
- 洛谷P2812校园网络【Network of Schools加强版】
题目背景 浙江省的几所\(OI\)强校的神犇发明了一种人工智能,可以\(AC\)任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被\(♂\)掏\(♂\)空,他 ...
- 去除 Git 安装后的右键菜单
64位 windows 8.1 安装 Git 后,右键菜单多了3个选项(Git Init Here,Git Gui, Git Bash),但是用不着,需要删掉.方法如下: 1.在 CMD 中进入 Gi ...