00:00
接下来继续完成。购物车的功能。购物车我们用一张表来存储,这样的话,用户在不同的设备之间去访问的时候,都可以看脑他购物车的一个记录,比如我在PC端,就是电脑端加入到购物车的商品,那么我在手机端,我去打开相应的网站或者APP,也可以看到我购物车加入的一个内容。啊,大家也可以去测试一下,像京东淘宝他们这些啊,大的购物平台也都是这么去做的,所以我们也把加入购物车的商品去存到数据库一份,那么的话我们就要先建立一个。购物车啊,这样一个数据表。打开终端。进入home stay。在这里啊,CD回到下目录,然后CD。回到我们的。项目的一个目录。啊,在我们的项目目录下啊。去执行创建迁移文件的一个命令。
01:17
这个命令可以创建一个啊表的一个迁移文件。但是我们不用这个命令去创建,使用什么呢?创建模型。啊,创建这个购物车的模型。啊,加个杠M参数,它会自动给我们创建这个迁移文件。啊,可以看到啊,模型创建成功,签文件创建成功,而且这个名字是和我们刚才所打的是一样的啊好。这个如果他没有自己结束,你可以CTRLC手动马上结束掉,其实已经执行完成了,这是因为这个终端的一个问题啊。来。这里就会多一个。
02:01
创建购物车的一个信文件。接着去写我们表字段。首先啊,有一个int类型。User ID就是每个用户添加的对吧。接着有一个商品的ID。啊,就是你这个购物车,你加的是哪个商品。哎,我们是一条商品,是存一条购车的一个记录。知道吧。然后还有一个什么呢。是数量。就是你这条商品你加了多少数量,我们可以看一下啊。看一下,比如京东的,我把它加入购物车。之后我去购物车结算。看一下。是不是这里我一条商品,其实就是在我购物车里面就是一条记录。
03:02
就什么,我还可以去改变它的这个数量,数量我们我们也要用数据库存一下。这样在订单结算的时候,我们只需要把这些被选中的购物车。然后把他的这个存储的商品的这个价格啊,存储商品的ID嘛,用商品的ID去获取商品的价格。然后再乘以。这个数量就能得到啊,这个商品的价格。然后我们把所有,哎,就是选中的。这些价格也加起来,就能得到一个总价,它是这么来的。也就是说我们实际上去结算的时候,我们提交的不是说是现在去选的这个商品,还有这个数量,还有这个价格,而是。我们从数据库里面去取出来的购物车里的数据去进行计算的,就是不要相信前台提交的数据,所有的数据都要我们后台自己去计算。啊,当然你购物车也不要去存这个商品的价格。行了吧。啊,因为有可能比如说商品它降价了,或者商品它涨价了,那你购物车你是跟着涨跟着降吗?那显然不合适的,对不对,我们什么地方会存下商品的一个价格,就是订单那里会存下商品的价格。
04:06
对吧,商品的价格实际上以你订单结单那时候为准,就是你交易已经完成了,你订单已经结算了,那你以后你不管你商品价格是增四减,那跟我已经完成订单就没有关系了,兄弟们,所以是订单要记录当时商品的一个价格的一个状态,但购物车不要去记录这个价格。啊。那我们只要记一个什么,记一个数量就可以了,也是特类型。Number。商品数量。然后再加一个字段。啊,加什么字段呢?Is checked啊,这个字段是干啥呢。就是我们这里的这个东西啊,是否选中,你看我们购物车里有这么多物品,那有的选中,有的没选中对吧,所以我们也有一个字段去记录我们的商品是不是选中了,这样我们去结算的时候,实际上取的是我们购物车里的。
05:06
被选中的这些数据。对吧,他没有勾选的那些,我们不要把它去参与到订单到这个结算中去。是否选择?零。不选一是选中啊。啊,那我们给他个梦之一,也就是说你刚加入购物车的商品,我让你默认选中。好,这样我们购物车的表就简单的创建完成了,没有设计太多复杂的一个字段,接下来运行迁移就可以帮我们去创建这个数据表。啊,不创建成功。那接下来就写相应的一些功能啊。嗯,首先创建一个控制器啊,用来写购物车相关的一些逻辑。
06:11
放到API目录下。嗯,我们删了重新创建吧,我感觉购物车我们可以用资源路由,你看购物车它有加入有删除是吧,有修改。找一下这个控制器。把这个删掉啊。删掉之后呢,我们重新创建,加上杠杠API,创建资源路由。这样的话,它里面会给我们带好这些资源的方法啊。接着我们去定义路由。在API里面,然后购物车的这个逻辑都是需要登录的。我放到这里。
07:06
Resource。卡,然后使用购物车的这个控制器。就可以了,资源路由直接写这个类名就可以了。接下来。我们把这个继承改成base c,这样它就会继承订购API的。啊,响应生成器。嗯,我们把注释也改一改啊。那这个index我们一般作为列表,列表的话,其实就是我们购物车的这个内容。啊,也就是这个购车的这个列表对吧。也就是购物车啊列表。购物车商品列表。好,接着。啊死套方法,这个是加入购物车是不是。
08:03
修复方法是查看一个购物车的详情,这个我们用不着,这个方法用不着。把它删掉,你这里删掉之后,你这里也要把它给排除掉,知道吧,不要造成啊产生一些没有用的一些路由。因为一旦你产生了一些没有用的路由。它会增加额外的这个路由的一个开销,就是我们路由越多,实际上在路由匹配的时候就速度会越慢。所以我们只保留我们使用的路由,没有用到的就把它给排除掉。啊,资源路由它接受一个第二个参数啊,可以一个数组,我们可以给你加一些额外的一些数据,比如说。Except,就是排除掉什么方法啊,这是个数组,我们排除掉秀好吧。嗯,怎么测试呢,看一看是PRAPI冒号。咱看看还有没有修方法。
09:03
找一找购物车相关的啊。这里啊,看看购车相关的。是不是没有那个溴方法了,我们把它排除掉了,对不对,好接着去写。阿布利的方法啊。啊,对的,也是更新啊,但是在购物车里面,我们用到的地方好像就只有这个数量的一个。增加和减少了对吧,啊。这个就是移出购物车。是这样吗?有这个,你看有这个删除就是就是移出购物车。啊。来,我们购物车的功能基本上大概就这些。
10:02
接下来去。嗯,开始写我们的功能啊,因为这里我们已经建好了路由。首先写什么,先先写添加啊。添加的话,写完之后我们就有测试数据可以用了。首先来写验证规则。看一下你们的数据表,它都要验证什么字段?找一下。用户ID,我们可以从当前的这个登录的用户去获取。数量啊数量。一般我们加入购物车的时候。啊,你可以提供这个数量,但是也可以不提供。对吧,比如什么呢,看一下啊。比如像这样,你看直接加入购物车,就没有让我们输数量是吧,我们在详情里面它可以去填数量,所以这个数量我们也不做限制,就是嗯,如果给了。
11:10
啊,我就用不给的话。那我就默认等于一啊,这里其实也可以给个默认值。什么啊,这里我们给墨值。默认是一,最小是一。啊,那我们重新执行一下迁移和回滚。先回滚上一次的迁移。接着重新执行迁移。啊,这样的话,这个字段就有了默认值,所以我们不写也行。接下来也就是。只需要去验证一个商品的这个ID就可以了,对不对,这个也有默认值,这个也有默认值,是这样吗?那这个可以从当前登录的用户去获取吗?
12:06
好。那其实呢,这个默认值啊,啊,给不给都行,我们也可以在代码里面去处理。等会我写一下大家知道了,那我们先把这个商品ID给验证了。这个字段首先。啊,但是必填。啊,接着他还怎么呢。他还必须得在这个商品表里面存在,是不是啊,你不能随便给我ID,你必须得是我数据库里存在的这个商品ID。啊,所以说要在这个商品表里面存在啊,并且验证的字段是这个ID。啊。接下来我们写一写啊。提示的一个消息。They are required。
13:05
不能为空。不存在。啊,这样两条验证规则啊,那我们先检查一下。验证规则。来,先登录一下。先把我们的地址打上。先复制一下。认证选上。然后输入我们的地址,添加的话是POS的方式啊。api.test。API前缀。
14:00
啊,来提交。是不是商品ID不能为空?然后我们去传一个商品的ID,裤子杠ID,然后随便写一个很大很大的,我们肯定没有这个ID,对不对,他会报商品的存在对吧,但是我们写个一。是不是有这个产品就过来了。是这样吗?啊?简单的加了一个呃,存在的一个验证,那接下来就可以写我们呃,添加购物车的一个逻辑啊。添加购物车。就可以直接使用。使用这个cut我们的这个模型。使用它的create方法。啊,里面直接放一个数组来进行插入,首先它有一个user-ID是不是。等于also辅助函数。从API首位里面去获取,然后直接可以拿到这个ID啊,不用再从user里面再去取他的ID属性,可以直接获取ID,接着有一个。
15:05
商品的这个ID,它呢,就是request里面。你扑他?商品的这个ID啊,还有一个什么呢?Number,但是个number呢,它有可能给我们有可能不给,所以我们使用input可以给一个默认值,也就是说你给我了这个值我用不给的话,就让你等于一,所以说这里我们给的默认值,这是刚才为什么说这里default你可以给,给不给啊都行。啊。接下来啊,添加成功之后,返回一个添加成功的一个响应。C,好,这样就完成了购物车添加,但是现在还不能用啊,因因为我们这里用到了考对不对,所以这个模型里面我们要给他去设置这个允许批量赋值的。字段才可以是吧啊。允许。
16:02
批量负值的子弹。来把我们的。这几个ID写上。然后把这个number也写上。这样就可以了,可以完成添加了啊。那接下来我们去添加一条购物车的一个数据,我们先去找一下商品表。看看要把哪个商品加入购物车。啊,要找一个已上架的。因为我们在列列表里面还有首页这个能看到的商品都是已经上架的。就这个吧。ID是八是不是。啊,我们把八这个商品加入构成。
17:00
有一个201的响应啊,那我们看一下购物车的这个表数据有没有。加入进来。现在没有这个表,因为上线才有。IDUID商品的还有数量,还有这个是否选中时间都有。啊,这样我们就完成了购物车的添加啊,还可以再添加一条,再把一条去加入购物车。我去再找一个上架的。到这个一是二等于一的,好,这俩都是,我们把这俩也加进来啊。再加一个这个吧。这个是十,这个时候给一个数量啊,也就是说ID为十的这个数量,哎,我购物车里放了三个吧。也是加入成功啊,那接下来去刷新数据库看一看。啊,找这个数据表。数量啊有了,那我们就添加两条作为我们的测试数据。
18:01
那接下来。嗯,你也可以再加一条,再加个这个还有11的是吧,他俩挨着嘛,11。三条也行。现在我们已经加入购物车了,接下来可以干什么呢?去,嗯,列表,等会再写,其他的先把这些简单的给写一写,比如说这个数量的增加和减少。啊,那这里是不是可以就是说注入我们的这个购物车的这个模型对吧。也就是我们要对啊,这个数据模型的它的这个数量进行一个更改,但是啊,既然涉及到数据库的这个更改的一个操作,我们要对提交的参数做一个验证。啊,那验证什么呢。验证number字段。好,Number字段我们都验验证什么,首先你肯定得必填是不是。
19:05
对吧,必填。然后。还要干什么,是不是还要大于等于一? Gt1是吧,你至少得比这个一大大于等于一。是不是?然后还要干什么?还有就是说你。增加的这个数量,你不可能超过我商品的这个库存吧。是不是这样的?啊,这样就不对了,对吧。这时候我们就要干什么,需要自定义,自定义这个验证规则啊,当我们使用自定义验证规则时候,这里就不要用这个竖线分隔了,用什么呢?我们改成数组。就是说每一条验证规则就是一个一个数组元素啊,不用这个竖线分割了。来用数组。把这个删掉看必填,并且是大于等于一。而且。接下来去写我们自己定义的验证规则,可以写一个B包函数啊,发型。
20:09
它有几个参数呢?啊,有一个是这个。Tribute就是你验证的这个字段的一个名字,知道吧,再一个就是。Y就是说你就是提交过来的这个值,这个值啊,就这个字段的值。啊,还有就是。有啊,就是说。嗯,验证不通风的一个情况,好,其实关于这一块呢,你去手册里面找。有。我们来看一看啊。找到。表单验证那里在基础功能表单验证。在它的导航的就是最下面有一个自定义验证规则,就是使用B包。看到吧,哎,就是可以。去使用B包的形式写我们的一个验证好。
21:04
接下来。我们就开始验证,也就是验证这个值,你就说你输入的这个number,你提交过来的这个number,你不能超过我上面的库存。对吧,那我商品怎么获取商品,我购物车里面有商品的ID。是不是我可以通过这个购物车里我存到这个商品的ID去查询商品是吧?你看这里面存有商品ID。对不对,但是哎,我们既然用了模型就不要再去啊,再写一个什么查询了,我们给他模型建立一个和商品之间的一个模型关联。是不是也可以?建立模型,模型关联啊。直接这样写了。
22:03
所关联的这个。商品。来,Return this。Belong to商品模型。它的这个类名。关联的这个外键是骨子杠ID,然后本表之间是ID,就是。所属表的一个。组件。接下来。在这里啊,就可以去写了,也就是说if。我们的这个value也是提交过来的,这个number的数量的这个值,如果你大于了car,要使用这个cut这个变量啊,但是我们这个是B包,B包使用它用不了,是不是要使用柚子啊,把这个变量给use进来。好,这时候就可以用了,它里面的商品里面的库存是不是,如果你。
23:05
传的这个number这个值大于了,库存大概什么,我就给你报一个异常。啊。数量。不能超过。最大库存。库存。好吧。这就是我们验证的规则啊,接着把消息给写一下啊,消息都是number相关的一些消息。就是数量。来一个一个验证。数量不能为空。数量要大于最小是一啊。那接着他的这个。
24:01
啊,这个我们就不用写了,这个的话消息他在这里就破除了啊,这个我们就不用写了。接下来测试一下。Put方式啊,更新我们用的是put方式。认证消息选上。然后请求的参数在这写。先把地址写上。复制一下这个添加的啊。然后加上一个ID,改成铺就可以了。数量不能为空是不是好?我们把这个number给加上,不为空,但是让它等于负一。是不是改成零也不行啊?给成零,也不像最少是一。也可以去参考一下别人的这个商城,也是到一你就减不动了。好吧,但是最大最大呢,它是限制到200,然后我们做的限制是不能超过我们最大的库存。来接着我们测试一下库存的一个情况,嗯,这个一。
25:04
这个购物车它关联的商品是谁?看看一它关联的是不是商品是八的对吧,商品ID为八的,找一下他的库存。是不是5710。那接下来我们需要大一点啊,我们提交个啊6000多。是不是我们这个自定义的验证规则也生效了?对吧,所以有时候在一些情况比较复杂的时候,就是他提供的这个表单验证不能满足我们自己的需求的时候,我们可以自己去写一些我们验证的一些规则。当然在那个验证类里面是一样用的,因为这个就一个字段,所以我就没有把它写成单独的一个request的一个验证类。好吧,啊。那数量你这边验证没问题的话,其实就是对它进行一个更新而已。哎,只要我们把验证做好,其实啊,这些代码还是不是很多的,很好写的,Number等于request。
26:05
Input。Number就可以啊,最后C5一下。好。Return一个响应。来看一下,我们把呃,它的这个数量改成。改成二啊。一个204的响应,刷新一下数据库。更新是不是写完了啊,当然也支持减少。移除购物车啊,这个就比较好写。直接依赖注入啊,购物车的这个模型使用它的。啊,Delete方法就可以啊。
27:02
然后return有响应。那我们把第三条记录给移出第三条,看一下是谁,ID是谁。是三是不是好把这个移除啊。三啊,还是这个地址,只不过方式换成delete。啊,这个参数也不用掉。一个204的响应,看看数据库。啊,这个应该是是不是没了。啊,移除购物车。然后数量的增加和减少,加入购物车都有了。最后来写我们购物车的。一个列表。因为它不涉及这个啊搜索啊,又不涉及什么一些排序,所以我们不用写request。对不对,就是单纯的一个购物车的一个列表啊,给我们展示出来就可以了。所以这个也比较容易。啊。你直接查询啊,所有的购物车就可以了。
28:06
当然你要加上用户,你不用把别人的购物车啊给给搞乱了,就是谁的谁登录用户呢,你就拿谁的这个啊,用这个购物车数据就可以。哎,加上这么一个Y尔条件啊,然后还要再加一个什么Y条件呢。啊,不用写了,我想的是加这个选中的,但是我们。啊,这个是做列表用的,列表用的话就是不选中的都要有啊,都要有所以。这里就直接get就可以了啊,不用讲了,那最后return。Response。返回一个集合,没有做分页,直接返回集合就可以,但是我们如果使用这种订购API的这个响应声列返回集合的话,需要我把参的分母对不对,那我我们现在没有购物车的transfer母,所以去。
29:03
加一个。复制一个改一下就可以了。把这个类名改一改。字段。改一改时间的话,这些。嗯,不需要。这个坏话。ID留着右侧杠ID。然后是商品的。接着是数量。
30:01
然后还有是否选中,这个一定要有他前台,他要判断,如果判断他是选中的,他要给他这个选中上啊。那接下来就可以使用这个transform。大家看一下。列表的啊,这个是删除的,我们再来一个列表的,选上认证消息。Get方式请求这个地址啊。是不是拿到这个列表了两条。对吧,这个数据还是怎么格式化后的。但是我来看看页面,我们不仅需要这个数量嘛。还有是否选中是吧,然后最主要我们需要商品的这个图片。
31:04
还有商品的这个标题,包括商品的一些这个简介什么的,是不是。啊,所以说。那我们在使用传的时候,我们想要加载一个额外的一个商品的数据,这时候可以干什么,就这里面去配一个额外的一个数据啊。一定要是零刻度的,然后这个啊,一定要是这个故字。就是。等会再跟大家说啊。也就是这里我们要有一个。额外。引入的数据要有一个这个属性。这里面配置上这个名字,这里面配置的才是我们能include额外去使用的啊,然后它会找什么呢?找这个模型里面。
32:08
找他这个模型里面去关联的。这个方法。最后会触发啊这个方法。叫什么?所以说。这个默认约束,你错了一点,他都会报错。我们在这里返回,谁返回购物车所关联的这个商品在这里依赖注入进来购物车。然后return。This。Item啊,一条它们是一条的一个关系,然后。里面的商品使用商品的transform。来看一下啊。这个数据是没有变的,对不对,当然我们要使用这个的话,你要加这个include才行。
33:04
然后。加载上这个商品的一个。关联是不是就有了,它的这个图片都是梳理好的啊。这样。我们购物车的列表。基本上数据也处理完了,大概就需要这么多数据。
我来说两句