当前位置: 移动技术网 > IT编程>脚本编程>vue.js > 商城分析(怎么在修改商品窗口里面进行保存商品信息)

商城分析(怎么在修改商品窗口里面进行保存商品信息)

2020年11月12日  | 移动技术网IT编程  | 我要评论
这次我们来写写怎么更新商品信息。我们上一次写的是如何打开编辑后,显示以前商品参数的回显,回显是有了,但是如果我们要更改参数并且保存的话,那应该怎么做呢?其实这是一个商品参数更新的功能。我们先看看这里,我们修改了商品的参数,并且点击保存,然后它显示的是保存失败。为什么会保存失败呢?因为我们没有编写对应的更新方法。可以看到下面浏览器报的错误,下面总共有两个错误,一个是图片的错误(jpg),另外一个就是这个保存的错误,他错误在什么地方呢?405参数就是请求失败的意思,我们可以看一下他的请求方式是PUT,而

这次我们来写写怎么更新商品信息。

我们上一次写的是如何打开编辑后,显示以前商品参数的回显,回显是有了,但是如果我们要更改参数并且保存的话,那应该怎么做呢?其实这是一个商品参数更新的功能。

我们先看看这里,我们修改了商品的参数,并且点击保存,然后它显示的是保存失败。为什么会保存失败呢?因为我们没有编写对应的更新方法。

在这里插入图片描述
可以看到下面浏览器报的错误,下面总共有两个错误,一个是图片的错误(jpg),另外一个就是这个保存的错误,他错误在什么地方呢?405参数就是请求失败的意思,我们可以看一下他的请求方式是PUT,而我们之前写的请求方式都是Get或者Post,所以我们要在后端写上Put的请求方式

在这里插入图片描述
可以看到这些参数都是它的返回参数。也就是用户修改完这些数据之后传过来的整体数据,你需要有个东西去接收,但是需要什么实体类去接收呢?这个你就要看这里面有什么参数,然后实体类里面有什么参数。但是你要想清楚,就是你保存完这些信息之后,会返回一个什么值,你要去前端那里看,
在这里插入图片描述
可以看到前端这里,http里面的方法都是说了向后端传送的方法,然后有个then,这个then就是执行保存成功后要做的方法,他这里只是写返回一个成功或者失败,没有其他返回值,所以我们可以去写后端代码了。
在这里插入图片描述
我们可以看到浏览器传过来的参数这里,这些刚好又全部是SpuBo里面的参数,所以我们可以用SpuBo来接收。
在这里插入图片描述
看看我们编写的这个方法,为什么要用RequestBody而不是用RquestParam去接收,因为我们接收的是一个json对象,你也可以看到浏览器这么多数值,这些数字值组合成一个类,我们要接收的是这些所有数值组装成的类,所以也是需要用到RequestBody
在这里插入图片描述
只要更新和响应成功,我就要返回一个204,所以最终我们只需要返回一个204状态码就可以了,因为他前端那里是用了message.success方法,所以如果我们返回一个204,这也是代表一个成功方法,他就会做出对应的响应,保存失败也是一样的道理。

在这里插入图片描述

他这一次更新要涉及到四个的数据表,注意,这四张表是有先后顺序的,因为id层层相扣。
在这里插入图片描述
我们更新一次数据涉及到很多方法,为什么这么说呢?因为在一个表单里面,你修改数据的时候可能是新增了一个数据,也有可能是删除了一个数据,也有可能是修改了一个数据,但是如果我们把增删改的方法都添加到后台业务逻辑当中,那这个代码量是相当大,为了方便我们倒不如直接把原来的表删了,然后把数据重新新增上去。如果涉及很多数据表,我们要考虑这些数据表操作的先后顺序,是先操作哪个表,然后再操作哪个表,一般我们的规则就是删除的时候,先删子表,再删主表。新增的时候,先新增主表,再新增子表。

下面我们先从删除开始做起,我们先删除库存表,先来看看这些表的关联数据:

先获取spu的id
在这里插入图片描述
才能通过spu的id获取sku的id
在这里插入图片描述
然后通过sku的id获取当前数据的stock库存量信息。
在这里插入图片描述
虽然传入的spu的id只有一个,但是查出来的sku的id有多个,但是每一个sku的id对应一个库存,所以可以用遍历方法通过每一条sku的id删除库存。
在这里插入图片描述
如何通过Spu删除Sku信息呢?我们可以去获取Spu信息然后去删除Sku,
在这里插入图片描述
这里解释一下为什么可以通过Spu的id去删除Sku,因为我们在输入表单的时候,
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面这几张图我们可以看出Spu的生成方式,每一个品牌,商品分类,还有一个Sku列表等等信息生成一个Spu的id,所以我们如果删掉特定一个SpuId对应的所有信息,那么也包括它这个特定的Sku信息,因为在我们的修改编辑的表单窗口中,一个SpuId的所有信息都在表单里面包括Sku列表,所以要更改这个SpuId数据里面的全部信息,删除掉Sku列表也不为过,把新的数据新增上去即可。

我们应该如何去新增Sku这一块呢?
在这里插入图片描述

可以看看浏览器,返回的参数,你Sku的数值很多,也是要一个个传进来,所以你需要用遍历方法去传。
在这里插入图片描述
在这里插入图片描述
所以我们需要用到这个遍历方法,也包括库存,库存也是需要根据Sku的id去新增。但是你可以看到这个方法在其他类里面我们该如何去使用它呢?
在这里插入图片描述

我们可以采用提炼的方法,也就是把这个方法单独提炼出来作为一个函数,给他取上函数名,函数名就是这个方法的作用,然后我们再在自己的那里面去使用这个函数。
在这里插入图片描述
可以看到这个方法没了,变成了这样,这不就是简洁多了吗?
在这里插入图片描述
因为在同一个类里面,所以我们直接用this就可以调用。
在这里插入图片描述
最后两个我们就直接进行更新就行了。
在这里插入图片描述
可以看到他这个更新方法的介绍,为什么我们不直接把这个更新方法用在更新SKU和库存Store上呢?因为Sku和库存都是列表型的,而我们这个方法只适用于某一条数据,所以不太适合。
在这里插入图片描述

但是这里要注意,有些东西是不能更新的,比如创建时间,最后一次更新时间,是否上架,是否有效等等。
在这里插入图片描述
所以我们要设置成这样,除了最后一次修改时间能改之外,其他的都要设置为null,为什么要设置为null呢?因为要防止别人去篡改。

在这里插入图片描述
最后还有个事务不要忘记了
在这里插入图片描述
测试一下,点击保存
在这里插入图片描述
在这里插入图片描述

本文地址:https://blog.csdn.net/Andre_dong/article/details/109642892

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网