00:00
确认收货完成之后,就可以对商品进行。评价了啊,就是评价商品,这是我们的项目的最后一个功能了。关于这个商品的一个收藏啊,大家可以作为一个作业去写一下,尝试一下自己去写一个功能啊。来,我们首先创建一个。这个评论相关的空隙啊。模型和表我们是已经有了的。Comment。嗯。位置创建错了啊。没有加目录。它放到这里面去了啊,没事,我们挪一下就可以了啊。然后把他的这个命名空间改一下。加个API就可以啊。继承base controller。然后评论的话,一个插入数据库的一个操作的话,这里我就用一个四套方法啊。
01:06
三四套。评论。Request request,看一下评论的表都需要什么?啊字段就是说什么字段是必填的。找一找评论的表。这个得创建评论对吧。但是在后来好像又追加了字段到评论里面看一看是在哪,在这啊,追加了一个str的一个字段。啊,但是这个有默认值啊,默认值呢,但是这个默认值有问题,我们这个是五星好评零到五星对不对,所以我们的默认值把它改了,改成五星,就是你不选的话,就给你默认是五星。啊,不能是菱形差评的,这样不好。把这个改了。啊,这个不用看了,他因为是这个。
02:00
给了默认值,所以你你填不填都行啊,我们不用做验证,接着看,主要看这个地方。也就是说我们看看。啊,需要做验证的都有哪些东西啊,先把这个验证写一下,我一堆惨。啊,验证来看看要验证什么。首先啊,用户这个ID不用管,我们从当前登录人去获取就可以啊,所属的这个商品。嗯,商品呢,嗯。我们可以做一个验证啊,必填就可以了。好B填就可以了。那你们可能有疑问,那为什么啊不再验证一个这个商品是否存在商品表呢?因为我们在下面会做一个验证啊,会验证这个商品是不是属于这个订单啊,所以没必要多此一举,只要你必填就可以了。啊,接着。呃,我们这个评论的星级不验证,你可以给可以不给啊,就是差评,好评,中评,我们默认是好评,然后评论的这个内容你是一定要给的。
03:02
对不对,评论你不能没有内容啊。来。接着看看还有什么必须给的啊?包括这个商家的回复啊,评论的图片。啊,这些都没有了,其实只要验证这两个字段就可以了,啊,也可以去加上我们的这个消息。哎,因为我们的翻译不一定有这个故事ID啊。商品ID不能为空。好,接着。把这个啊也给验证上啊。评论内容不能为空啊,验证好之后呢,接着去写我们的逻辑啊,在其实这个逻辑比较简单,就是像评论表去插一条数据。是这样的啊,但是在插入数据之前呢,我们有一些呃验证需要加,首先我们评论是对哪个订单进行评论,所以这里我们可以依赖注入一个订单。
04:02
对了吧,可以依赖住这个订单嘛,好,那问题就来了,订单,既然我们对哪个订单进行评论,是不是可以对订单的状态做一个判断,是不是订单只有四的时候,就是说已经呃确认收货了才可以去评论。啊,只有确认收货,只有确认收货才可以。评论是吧,也就是说space。等于四的,然后这里来个判断啊,如果我们这个订单的这个space啊,不等于这个,那直接返回一个这个错误的一个提醒啊。Error订单状态异常吧?啊,你要给详细价也可以,你就说只有确认收货才能评论吗?加不价格给啊好,接下来我们再想个问题啊,我们评论是对某个商品进行评论,但是我们一个订单下面它有多个商品。
05:04
是不是有没有存在一种可能,就是说我们评论这个商品根本就不是这个订单里面的。有这个可能吗?对吧,所以我们要把这个可能给过滤掉啊,这也是为什么我这里不验证这个商品,就是在商品表存不存在,因为我们在这里会进行验证啊,就是要评论的商品。你不可能说你随便对任何商品都能评论吧,你至少是你这个订单里面的啊,要评论的商品必须是这个订单里面的,那怎么检查我们这个订单啊,你去看这个模型,它里面是不是有和商品进行了一个远程的一对多的一个关联,那通过这个关联可不可以拿到这个订单下面所有的这个商品的一个ID。啊,是不是可以的啊。那所以啊,直接用in array就可以了,In array也就是我们要验证的这个request里面的啊,这个商品的ID你在没在。
06:02
在没在哪呢?我order里面啊,所有的这个商品啊,我们用查询构造器,因为用查询构造器可以成为plus方法plu啊好。这个ID啊,但是这里呢,你要是用ID会报错的啊,你们可以试一下会报错,因为order和这个故它不是直接就是说直接就是关联关系对吧,它是通过了一个中间表示远程的一个一对多的一个关系,所以我们一定要指明这个ID到底是。啊,你你你告诉我,你到底是这个细节表的ID。还是这个商品表的这个ID。是不是?就是吧,啊,当然你你不这么去拿的话,也可以怎么拿呢,你不不用这个远程关联我们商品下面是不是有多个这个订单的一个细节,我们去拿那个所有的订单的细节,订单的细节里面是不是记录了这个商品的这个ID也可以啊。对吧,那我们就少绕一层,我们用这个,这个至少只有一层,大家还好理解一些,好拿这个所有的细节,然后取什么字段,取商品的这个ID字段。
07:07
哎,这样就得到了一个商品ID组成的一个数组,也就是这个订单下所有的商品的这个ID组成的这么一个数组,所以我们判断你要评论的这个商品的这个ID在没在这个数字里面。对不对,你看加这个叹号取反就不在这个里面,我直接就给你返回啊。就说此订单不包含。此订单不包含。包含啊该商品。好。做好这几个验证之后,其实后面的就简单了,就是插入啊,生成评论啊,评论数据。那这个就啊比较好写了,直接把什么呢?啊,我们来看一看啊。
08:01
首先看看这个评论的这个模型啊。我们使用create方法啊,首先看看它这个模型里面有没有去设置这个允许批量赋值的字段,是不是没有。但是它字段比较多,我不想一个去写了,这时候可以用一个反向的一个,就是说不允许批量赋值的一个属性啊。不允许批量复制的。段受保护的啊,让它等于空,这样的话就所有的都允许了,是不是啊。这些像这些啊,Request里面都会给我们啊,这些request都会给我们。清楚吗?包括这个评论的这个图片。是不是?哎,包括上面的ID,所以哎这个我们直接去啊,插入request里面的报就可以了,但是在插入之前。啊,我们看看还有什么字段没有,是这个UID没有,对不对,所以我们要把user ID给。
09:04
追加到这个request里面啊,有offset。又是ID。哎,这样就可以了啊,把这个当前登录者的ID居加的request,这样request就可以直接去插入到这里面了,对不对,最后我们返回一个。成功的啊,插入成功的一个响应就可以啊,Response。Commit。哎,这样我们评论的功能就写完了啊,当然还要给他去创建一个路由,让他能评论。哎,在这里继续写。评论商品啊,那接着还是用它吧。但是把它改成post。然后对这个订单进行。
10:01
嗯,它里面的商品进行评论啊。啊,就这么着。然后这个空隙要换一下了,是comment。Command control里面的方法。评论商品。好,我们来请求一下事实啊。对哪个订单进行评论呢?对这个我们有几个订单啊,看看两个。对这个四进行评论吧,好吧。那我们请求这个地址,把这个换一换就可以了。Com ment,然后这里用post的请求啊。是商品ID不能为空,评论内容不能为空,对不对。那接着我们把这个商品ID给加上啊,商品ID给加上。我们订单的状态是对的,所以没给我们拦截商品ID,我随便写个333啊。
11:02
几个111?评论的内容。来,随便写点,不错不错。发送。是不是?啊,他说这个数组这个第二个这个婴婴儿这个第二个需要一个数组啊,我们给了一个对象啊,那说明什么问题呢。找到控制器啊,说明啊,这个结果它是一个对象,它是一个click的集合啊,所以这里还要转一下个位就可以啊。啊,当然我们也可以,呃,不用这么麻烦,我们可以直接用集合的一些方法去判断,就说这个集合里面包没包含这个元素。啊,也可以啊,你先看看现在,现在是可以的。不把子上面对不对。行,那我们就这么写吧,你们可以尝试一下,因为这个结果是一个集合嘛,集合呢,你可以找到集合的一个方法啊,在这个文档里面去找到集合的一个方法。
12:06
然后它有个方法呢,去判断一个元素,就是在没在这个集合里面啊,所有的可有方法里面,就是大家下去可以自己去优化一下。啊,在这个这个所有的一个。可用的这个方法里面有一个方法是,呃,检查一个元素在没在集合中啊。这里我们就用这个方法吧。嗯,这样就。就是说订单不包含此商品对不对,我来看看这个订单。啊,它都包含什么商品。找一下订单的一个细节表。ID为四的是不是包含八和十?好,我们对这个八进行评论啊,所以把good ID改成八啊,不错不错。其他的星级呀,图片呀,好评啊,我们就不填了。哎,201创建成功,那接下来去刷新一下评论的。啊,这个表。是不是?你看评论成功是不是?
13:01
啊,这个是我们今天评论的吗。啊,10:20这里,然后这个是以前我们测试数据嘛,啊,这个是我们刚才评论的用户ID啊,包括这个好评啊,包括这个星啊,星为什么没有给成五呢?是因为我们没有重新迁移文件,我们虽然只是改了这个啊,改了这个没有重新执行这个文件的一个迁移啊。所以这里啊没有事啊,因为我们等一下全部完成的时候,就会把它去部署到这个阿里云的一个服务器,我们把它变成真正的一个啊,公网上的一个项目,就是上线的一个项目啊,重新进行迁移的时候,这里就。啊,回升项啊,所以这是一个默认值的一个问题啊。啊,当然我们也可以去提交这个参数,好吧。啊,那接着。呃,还得进行一下优化,其实你这个所有的这个通过都通过之后呢,我们还要再加一个啊,已经评论过的商品不允许再评论已经评论过的。啊,不能再是评论,那我们认为什么情况下是已经评论过呢?你不能说是这个商品ID存在了,就是已经评论了,这样是不对的啊,你加上用户ID也不对。
14:10
知道吧,因为我今天我可能买了这个商品,我明天可能还买了这个商品。是不是?啊,所以你还得连上这个订单。啊,还在连订单ID,但是我们这里面并没有记住这个订单的ID。啊,所以少一个字段啊,所以我们应该去。嗯,加上一个字段。哎,就是在哪个订单里面进行评论的。那既然少字段,我们就加字段来。Artist make。M ad order-ID。A表。com表是吧,Table杠杠,Table等于。
15:02
Ens啊好。Migration打错了。这个是t ion。这里是T的。好,创建完成来,接着我们在这里去加上这个订单这字段。Dot table。嗯,英特类型啊,英特类型。Order-ID。好。这个也不能为空。清楚吧,也不能为空。可以备注啊评论的订单。评论的商品啊,所属的订单。好,就这样啊,来接着运行迁移,给它加上这个字段啊,加上这个字段。
16:11
这个抗TRC强制结束掉P。MIG。好,增加了这个字段,来我们刷新一下,有了是吧。啊,那这两条数据啊,因为我们没有去做这个,没有写这个after,所以他在后面选啊。那我们同时去优化一下吧,我就不回滚了,下一次我们执行迁移的时候就有了after,让它在这个右侧杠ID后面吧,好吧。嗯。啊,不用回我了,你回我一下也可以,不回我也行。也就是这个啊。他现在都是零,其实这两条评论没有用了,把它删了,删了我们重新去评论一条,这里插入来改。也就是说,我们不仅要追加这个。右侧杠ID还要追加这个order-ID order-ID呢,可以从这个order里面去获取到这个ID。
17:05
哎,从这里面拿到这个ID。是不是好,那我们啊接着去。评论啊,先生成一条评论再说。评论完成,哎,刷新一下数据库。有这么一条数据啊,而且。啊,这个all的ID什么都是有的啊,除了这个是我们默认值给这个问题啊迁重新迁移就好了,嗯,接着已经评论过的不能再评论,那我们认为什么是已经评论过的呢?啊先切啊检查评论。好。然后你得先用它去查一下啊,主要的条件有user-ID。然后连上order-ID连上商品。我们认为这三个条件,也就是说。User ID就是同一个用户,同一个订单,同一个商品,这样我们可以认为是重复的一个评论清楚吧,所以就不能让他评论了。
18:02
一个条件两个好的杠ID。哎,这是两个了是吧,接着第三个。是商品的这个ID啊。拿商品的ID request里面去获取。好,嗯,直接取它的抗就行啊if。大于零啊,如果你的这个抗是大于零的。直接掉啊,就说此商品已经评论过了好吧。来测试一下啊。已经评论过了吧,是不是?是不是给我们返回了拦截了,是不是,那我们如果换一个换一个商品啊。
19:02
它里面是不是还有个十。对吧,我们对世界进行一个评论。就能正常评论啊,这是加了一个。限制这样的话,我们商品评论的功能啊也完成了,而且还加了很多的一个限制啊。
我来说两句