00:00
接下来继续完成商品相关的一些功能,比如说商品的详情,商品的列表。以订单的结算,还有一个在线支付等购物车的话,我们就不去单独去写相应的功能,去签对应的表了。啊,购物车啊,完全可以在前端用前端的代码去实现,除非你想做这个多端的一个统一,比如手机上你加入购物车,然后电脑上也能看到,这种情况下你可以去为购物车去创建单独的表,用来记录用户的购车的一个数据。那我们这里就不写了。只写商品的详情列表,还有订单的结算以及在线的一个支付,我们先写商品的详情。首先看一看啊,京东的一个商品的详情都是什么啊,这个因为我们商品表涉及的比较简单,所以像这些子图集啊,还有标题描述,我们都放到了一个表里面,当然我们没有做SKU,所以是没有这一块的版本的一个选择。对吧,然后像这个商品的介绍啊,商品的详情,还有评价这些我们都是有的,就是吧,包括这个推荐的一个商品我们也可以呃,从这个分类里面可以查出啊,相应的一些同分类的一些商品。
01:11
接下来开始写我们的功能。首先创建一个控制器,商品的控制器。放到API啊,我们的。前前台的这个项目里面。接下来去写路由。商品的详情是不用登录的啊。让他依赖注入商品可以吧?
02:02
这里换一换。里面的秀方法。找到这个控制器。我们就啊不用啊,让他这个商品直接依赖注入进来,因为我们还要写很多查询的条件,比如他关联那些评论。对吧,所以直接我们手动去查询,嗯,因为这里不仅要返回商品的一些信息。我们还要去返回相应的推荐的一些上面的信息,所以返回数据比较多。就不能使用参form母去格式化我们的数据返回了。好,接着先。把我们要写的内容给注释相应给写出来,这样我们写功能不会乱,就商品的这个数据啊,商品的这个详情,然后还要返回什么推荐的。
03:03
啊,相似的商品吧。可以吧?接下来哎,我们要把这两个给返回。先看商品的详情。等于。模型,然后YID等于。这里传过来的这个ID啊,写ID吧。First取一条。好。先来返回看看啊,让他继承贝斯康。一个。
04:00
就是因为我们返回的这个啊,不同的数据有点多,所以呃,没法去使用它的这个传输分嘛,我们要自己手动去格式化它的一个数据的一个返回。到过岛,还有一个,呃,相似的商品。这个我们就先给成空,等会再去查询,再去放这里先来看一下结果啊。使用get方式请求。啊,顾子,然后给你一个商品的ID就可以了。啊,当然也不用登录,也不用加这个认证,但是商品的ID我们去看一看商品ID都有什么。找到商品表。应该找那些?呃,就是。上架的啊,上架的我们找个这个啊。八啊,那为什么我们查询的时候不加上这个上架的一个条件呢?因为我们这里是传这个ID过来的。
05:05
知道吧,你一个没有上架的这个商品。在前台的API中啊,不管是首页啊,或者是商品的列表都是看不到。我们会在这个做这个首页和。列表的这个API的时候,就把这个给过滤掉了,所以我们都ID的话就直接查询就可以了,不用去加那个什么上不上架的条件,但是我们这里写例子的话。姐签手动取一个上架的第八个。跟上一个ID为八的一个数据。啊,是不是拿到这个商品的数据了。是不是?啊,然后。它有这个cover是吧,杠ul,但是它的这个子图并没有处理,如果我们存的是ossk,就是说只有一个文件名的话。我们是不是还需要一个呃pictures,然后杠URL把它就是说啊,加上这个OS的域名的。因为我们这是测试数据,测试数据带的域名,所以啊,你们看到这个效果,如果我们存的是oss的文件,就存了一个K嘛。
06:04
对吧。所以说我们还要再加一个修改器,现在只有一个修改器。去加了这一个字段,要给商品再去加个修改性来。找到商品。这里啊。我们再加一个修改器。想个什么名字,Pis?U吧。PSOS啊。这个是我们的cover的OUL。然后追加额外的属性,也要把这个字段给追加上去,这样查询的时候才会才会有。啊,这里面就要写我们返回的结果了啊,我们先随便返回,看看能不能追加上。
07:04
看最后是不是有对不对,那我们要做的事情是什么呢?把它原来的这个数组里面的每一个元素给它加上oss域名是不是。啊。也就是哎,我们要处理this里面的PCS啊,处理这个属性,给它每一个元素加上域名。啊,你可以写一个FOR1去处理。像什么啊,就是类似于我们修改器。找一下这个。啊,类似于。这个商品的这个传缝里面。啊,类似于这样的去处理,你看我们循环,然后定义数组,然后往这个数组里面去放入新的一个元素,最后再返回这个数组也可以是吧,好,这是使用。呃,循环的方式,然后利用数组,那我们今天来换一种写法,使用什么呢?使用集合。啊,我们先使用。Collect把它转成集合,集合的话我们就可以使用集合的方法,集合有用什么方法呢?Map啊,可以去啊,便利它里面的集合中的每一个元素,并且去对这个元素进行修改。
08:12
行吧。来里面是个B包啊。第一个是item,就是每一个元素,第二个是K啊,其实K我们用不着,这个我们就不写了,它的K就是索引,用不着是不是好,那我们对它的这个每一个这个item进行什么样的修改呢?直接return,你修改这个值就可以,我们为每一个item去,呃让它。使用这个ossr的负杂函数去给它转换一下啊,就是如果是K的话,给它加上oss域名item啊,最后它这个返回结果是处理后的一个新的一个集合啊,所以我们直接把这个集合return就可以了。知道吧。啊,不用啊,你再定一个变量,再就麻烦直接return就可以了啊好。来看下结果。
09:00
是不是这样的啊,那你们可能会有一个,哎,地震一样,没怎么没怎么处理啊,这是因为我们,呃,这个OS,它这个辅助函数。对吧,它检测的有有atps就直接返回了吗?那我们比如说连接一个东西,我们随便连接一个测试啊,随便写一些东西给大家看一下,你看看他不会连上它。来看最后。是不是每项会给我们做一个处理。是不是啊,当然这个是map便利,Map便利的话,就是我们对里面的某一项的修改都会重新去啊返回啊,给我们生成一个新的一个集合,那还有一个是一起,一起就相当于佛一起啊,它是就是正常的迭代啊,正常的迭代某个元素,但是不会对呃这个结果产生一个影响,来看一下它的对比。看是不是没有什么变化对吧,所以这里我们使用这个map是最合适的啊。好。啊,直接返回这个就可以了啊,其实关于这个集合的所有可用的方法在。
10:00
呃,文档里面都写的很详细啊。综合话题集合,这里面都写的很详细。大家去看一看就可以了啊。比如我们搜一下刚才用到的这个map。他这里啊,大量的也用到了这个map,你往下找,它有这个map的一个方法。便利每一个存数词,并且修改之后返回是不是?生成这个被修改后的集合项的新集合,看到了吧,还是你可以搜索这个一情。看看它们之间的区别。我们在这里去看。一些就是简简单单的循环集合啊这么一项。注意它们之间的一个区别啊,所有集合可用的方法,你在这里都可以去去找到啊,所有的这个可用的方法集合在我们处理起来数据还是比较方便的,有些数据你不好处理,你就可以把它给转成集合啊。
11:02
再来处理。好。这里我们也就用了一下。啊,写下注释法使用几何处理啊每一项。返回这个处理后的新的集合啊。这样商品呢啊,我们就写完了算是。啊,但是我们来看一个,呃,京东的这个啊。我们这个详情里面还有什么,首先这个介绍啊,价格什么之类的,像这个图啊,什么价格之类的,我们商品表里都有,但是评论对吧,商品的评价。对不对,你看不仅要评价的内容,还要有评价的这个人的头像,还有人的这个名字。是不是,所以我们得把这个商品相关的评论,以及评论相关联的用户都给查出来,对不对。
12:03
这时候。我们知道商品模型里面它是有这个评论的,这个。啊,关联关系的找一找看是不是啊,所以我们可以使用什么with。哎,欲查询啊,预下载。来,在这里写上位子。哎,加上这个评论,接下来我们来再看一看商品啊。是不是一个有了一个command的一个属性,但是空即可啊,就说明这个商品相关联的没有任何评论。对吧,来,我们去加一条评论啊,当然你们也可以啊,算是一个作业,你们也可以去为这个评论去写一个啊,测试数据的一个生成,生成大量的一个评论,是不是,你看生成大量的测试数据中的评论这个。有此ID啊,就你就默认写一就行,因为我们的超级管理员就行,因为现在只有一个用户对吧,那商品的ID你就可以随机嘛,在我们已有的商品的这些ID里面,你去随机对吧?包括这个评论的星级你也去随机,内容也随机生成是不是。
13:10
啊。也可以就大家去写一下,利用我们呃,之前讲过的,我们为商品生成的测试数据,是不是你也可以为评论去生成测试数据啊,这里我们就不写了,我们这里先手动加一条,看一看效果,一用户一商品我们给啊这八这条商品去加这个评论这个八啊。啊,评论的这个一啊好评内容啊,不错不错,好商家的回复,包括这个评论的这个图都先不加了,包括创建的时间给他加上。那这个给加上,然后提交一下,现在就是八这条上面就有一条评论对不对,来我们再来去刷新。这个商品的详情。可以看到这有一个评论的一个集合,你看有这个它的这个字段,包括内容。是吧?但是我们来看。
14:02
啊,这个图片当然我们没有啊,有的话你想要图的话,你就给上也行啊,我们是有这个字段的支持的啊,这个字段是支持的,就是我们的这个图集吗。知道吧,好好。然后。嗯,这个星级啊,一到五星这个我们没有字段。啊,没有作战,等我们再写。啊,这个订单中心的时候,去给商品评价的时候,我们再去完善这个字段好吧。嗯,那还差什么人的头像,人的昵称是吧,所以我们还需要人的一个信息,对不对啊,那我们知道这个评论它关联的。哎,来看一看啊评论。哎,找到这个评论,它关联的是不是有用户信息,你看是不是有优势信息,所以说这里我们可以直接用点啊嵌套啊嵌套域预加载就可以拿到评论相关的用户。这什么?来看一看。啊,不是啊,是看我们的这个测试数据。
15:01
好。你看商品,然后商品的评论,评论是不是还关联了这个用户,用户的信息都有是不是。是这样的吧。啊,但有时候哎,我们想只要指定的一个字段。怎么办?啊,你可以写。就是说要指定的一个字段啊,这个写法我们也用过,在这个我们写help的时候。我们查这个分类的时候啊,是不是可以通过这个位置,然后呃,使用它这个数组的一个形式啊,数组里面我们传这个皮包函数去。呃,选择我们想要的一个指定的一个字段。你看是不是类似于这个。对吧,好,那我们也按照这个方式处理一下,嗯,首先那这里就不能用字符串了,我们要用数组呢,数组我们要拿谁要拿。这个。啊。然后再拿一个这个。
16:00
也就是说我们要拿一个评论和评论关联的用户,因为我们要一个一个去自定义它的一个字段啊,所以要这么麻烦一些啊,当然如果你。啊,你不需要,呃,这个处理。评论相关的字段啊,我只处理用户相关的字段,我就这么写就可以啊,然后给一个比报函数。好,里面写query。注意啊,这个query是这个优势查询构造器,清楚了吗?是我们。这个的查询性,所以我select。一定要有ID啊,一定要有ID,因为是用户的ID和coms进行关联的是吧,好。ID,然后昵称name,然后还有一个头像是吧。这几个字段了,对吧?啊,当然我们可能还需要,嗯,头像的话,我们应该是要要这个URL,而不是要这个原始的一个头像。
17:01
因为用户。里面我们是不是定义了这个。啊,应该还没有定义这个修改器。行吧,我们先返回一二等会我们来看一下怎么去优化啊,先来看看我们的这个结果符合预期不符合,看一下。这个打错了。E。评论是不是有?关联的用户是不是只拿了我们指定的字段,对不对,但是这个我们需要处理一下,怎么处理呢?它有可能存的是oss的一个。Oss的一个那个K嘛,我们要把它给带上那个。URL经过处理,所以继续给user去写修改器。那角的有色模型。来,我们在这里写修改器啊。
18:03
嗯,Get URL曲柄。返回OSUL处理后的this。哎,头像。好,把它给。加到这个修改器里面,让它自动取直它这个字段,不然的话,你这里面没法弄啊,这里查询,你如果带上这个U2你查询的话,它是不存在的这个事情。就是说你不能去查这个杠URL。你查的话,这是对数据库层面的查询,数据库里面没这个字段报错啊。啊,之前刚才有一句说错了啊。我们把它给追加进来。追加的时候。啊,是这个下划线,这样就会自动去给我们加上数据库不存在的一些字段。
19:12
这个是头像的啊。五三次于二二好,接下来。再看一下用户这是不是有个头像的URL了,而且是OS处理后的嘛。啊,这样就符合我们的预期了,当然评论的字段我们就不去单独查了,这些字段就刚好我们差不多都能用上啊。接下来去就是说商品详情这一块,基本上是处理完了。把这个结构。谢谢啊,折叠一下,好,那接着处理相似的商品,因为我们没有其他太多的关联的一些属性。啊,也没有说做那么复杂,根据你的这个浏览习惯,你在哪个商品上停留了太多的时间啊,然后给你做这个智能的一个推荐,对吧。
20:02
然后或者说你。经常会频繁的去浏览某一类商品,给你推荐这个某一类的,我们没有这么复杂的一个推荐系统,我们就简单的去查询和这个商品同类的好吧。Dot black。加个S啊,它是一个集合。嗯,使用它啊威。这个也加上S嘛,其实故事才是商品的一个意思啊,把它给补上吧。好。Where,首先你得上架吧啊?因为这个不是通过ID查询的,我们再把这个查询条件都写好,对不对,好接着你的这个分类ID。得和哎,我这个商品的分类ID一样吗,是不是。
21:00
哎,查同分类的嘛,好,同分类的呢,它会有很多啊很多呢,所以我取十条。比如说十条吧,好,最后盖就可以了啊。来,这就是我们相似的一个商品。取这个十条。啊,但是你这么取十条的话,哎,那还可以加一些排序,是不是,因为你这么取十条的话,他可能就是总给你返回那样的,就是说前面的十条,那其他的商品就没机会了。是不是,那怎么办?啊,我们是不是可以啊。随机随机返回对不对。好,我们来看一看随机返回的这个方法是什么,在数据库的查询构造器里面。有一个in random啊。这个啊。啊,随机排序。我们随机排序之后再取十条,这样就是类似于随机返回了。
22:00
啊,十个商品并且是同分类的,哎,我们认为它是一个推荐的一个商品,来看看结果。往下走啊。下面这里都是啊,相似的一个商品。我们取出来这个十条是不是。对吧。当然这个相似的商品,它字段太多了,我们用不到这么多字段,你仅仅能用到的就是一个。ID和一个。Cover图是不是?对吧,你看你标题,然后还有一个。啊,这个销量还有价格。啊,销量呢,我们没有字段去维持。这个我们也可能会需要这个字段,所以在购买商品的时候啊,我们可以去加一个这个销量的一个字段,来维持我们商品的这个销量啊。
23:00
好,暂时我们现在只返回这些信息啊,所以这里可以加一个select。返回ID title价格是吧。啊,这是这三个信息了。来,先看一看。还有什么?图片是不是啊,图片呢,那个Co UR会自动给去加上啊。你看这里。靠,212会自动追加啊,为什么是空呢?空是因为你不查这个CO2属性的话,它自动给你追加不上,也就相当于你查出来的结果没有这个属性。啊。那这个就有了是吧,好这个就不用管了啊。当然。你要感觉看着不舒服也可以去掉啊使用啊对这个结果进行。
24:02
Transform。然后去迭代这个眉笑。好,Return item有一个set had啊,里面是个数组。可以去把我们不需要的这个子弹给。隐藏掉啊,来看一看。是不是就没了啊,也可以啊,就是写不写都行啊,你看吧。当然这个是啊,这个赛对这个啊。单个的这个元素对象去使用的啊,集合对象使用的,如果我们想对这个整个集合啊去使用它有一个make。没海。然后加上我们要隐藏的一个字段就可以了。UL。
25:01
来再来看一下啊。伤心。往上找是不是也没有那个字段了。这是隐藏,我们额外增加了一个字段,那其实还可以怎么做呢?嗯。还可以,就是说。哎,比如说我们的商品这里。哎,我们不去。自动去加上它。啊,不去自动去追加额外的,我们在用的时候。去增增加这个额外的一个属性。行了吗?啊。那我们把这里改一改吧,因为并不是说呃,商品都会用到它,只有详情里面才会用到它,是不是。啊来把它给删掉,不让它自动追加,但是这个你要留着啊,这个你要留着。啊,那这个我们就不用写了。啊,因为你现在已经不会自动追加了,是不是。啊,不会自动离价的是不是。
26:00
但是详情里面。啊,也就是说这个我们需要。但是这个不需要。清楚吗?但是现在我们没有放到喷里面就都没有了,看到没有,上面这也没有了。所以这个详情需要的话,我们要让它在这个运行时去增加啊,而不是。呃,这个直接每次都是压,所以我们把这个每次都是压的。这个给去掉了。啊,这个就去掉了,那让它运行时候,就是说我们查询的时候增加这个字段啊,可以使用。这个openend啊。哎,对,查出来这个结果open pen的URL来看一下啊。是不是有看这呢,是不是对不对,哎,这样的话,我们这个详情就是说推荐的商品就不用用了,呃,然后我们比如说首页用到的一个数据。
27:06
啊,也可以。也可以,也不会,也不用管它了,是不是,哎,只要我们详情会用到这个小图,加上它就可以了。再来看一下详情,还缺什么?嗯,基本上都有了。啊。但是。这里会显示一个热销是吧。还有这个价格。就是推荐商品这里,你看我们只是返回了这几个字段,因为我们表里没有价格,然后这个评论这里有一个星级。是不是?啊。那。我们最后把这两个字段给加上吧,这样以后我们在写评论的时候就不用加了。啊,或者购买的时候,我们这个销量就自动增加就行了,哎,来最后增加这两个字段啊。
28:07
In。A。先给啊商品增加了一个销量的一个字段。整形就可以。给个默认值啊,默认值是零,一开始没有销量。
29:11
销量。把它给放到。放到我们的库存啊,这个后面好吧。接着创建一个。给comments表去增加啊。重新写吧,增加一个星星的一个啊,星的一个字段。
30:05
太那就可以啊。也给个默认指示。零星啊,我们应该是零到五星六个值。After。啊,让他在这个差评好评中评这个后面。零到五星。啊,接下来运行迁移。迁移成功啊,那我们商品呢就有了。啊,这个字段啊,有了这个销量的一个字段,接下来去改一下这个控制器。
31:03
查询的时候。哎,我们把这个销量也给卡上。就是查询那个像类似商品的时候啊。来看一下啊。找到这个like里面的这个类似商品,是不是就有了这个销量的一个字段啊这样。我们的详情的数据啊,除了没有做这个SKU基本上啊都有了。这个接口就算写完了,有问题的话,我们后续再去更改。
我来说两句