00:00
这节课我们来为商品还有轮播图生成大量的用于测试的假数据。啊,生成这个测试数据呢,需要用到这个faker。啊,它可以给我们随机生成啊,比如说name email等各个字段,我们需要的一些数据。来看一看。呃,的文档地址在这里。在这里。就是测试相关里面的数据库,测试里面它用到了这个工厂,然后工厂里面。嗯,他在创建这个数据库的数据的时候,用到了这个飞船。往下找。在。写工厂这里啊,他创建数据的时候用到了这个。这个F卡那。也就是说这个faker,它的主要作用就是给我们生成随机的一些数据。兄弟们。啊,可以看一看它的。这个get的地址啊,在这里。
01:02
下面有它的使用的一些文档。啊,比如我们使用不同的它的属性或者方法,会给我们生成什么样的一些随机的一些内容。啊,比如像这样的会生成这个。对吧,然后随机生成这个再比如啊。Title会随机生成。这样的一些内容。这是它所有可用的一些方法。啊,如果英文。嗯,大家看着比较麻烦。这里给大家找了一篇中文文档。就是别人翻译的,别人翻译的。就是对着这个去翻译了,下载一个文档。这是它所有可用的一些属性和方法,比如说它的这个随机的一个结果是什么啊。那我们测试一下啊,怎么测试呢?首先要使用这个fke啊,我们得先获取到这个F的一个实例。来打开这个。这里测试的话,我们就使用那个听课啊,听课是。
02:03
可以让我们快速去测试一些数据,使用的一个的一个。命令。使用。P artisan听课可以快速的去进入到我们这个听课,也就是在这里面我们可以去啊创建一些对象,或者去啊临时去测试一些数据啊,他会直接给我们输出到这个终端。来,我们。实例化一个飞的一个对象啊。实例化一个菲克的一个实例,好,这样的话呢,他就给我们。呃,实例化的一个F这样一个事例之后,我们就可以使用这个F这个实例去使用它的这些方法了,清楚吧。我们在这里只是临时的去测试一下,当然我们在项目中使用的时候,会配合这个模型工厂去使用,大家先看一看这些啊,随机的。内容。那比如说我们随机啊,生成这个内对吧。啊,每次都不一样啊,当然中文的也是可以的啊。
03:03
啊,就是加上这个括号也可以,中文的也支持,但中文的要怎么支持呢?中文呢,要去修改。有一个config。APP啊,里面有一个,你就搜索这个F就可以了。是不是有一个啊,菲克的一个配置,它用的en us,我们改成啊ZH-CN。就可以了啊,接着再来看一下。还是生成姓名?啊,当然要重新去创建一个这个重新去实例化这个对象才可以啊。重新进入听课班。找到这个实例,接着重新去看一下它的这个内。打错了啊。是不是就变成join了?
04:02
就是修改一下APP卡里面的这个配置可以了。这里面有我们所有可用的一些。啊,生成随机内容的一些方法。所以利用这个飞,我们就可以生成大量的随机的数据,然后我们再啊,就是往数据库里面多添加一些这样的一些随时数据就可以了,对吧?好,但是添加呢。我们也有一种添加的方式,不是说让你去自己去啊,一个一个的去分,一起去循环的去添加,我们可以使用什么啊,使用这个工厂。他在这个数据库测试里面有一个工厂。也就是说,我们需要向数据库里面去查这些记录,我们可以为每个模型去创建啊一个对应的一个工厂。好,在创建工作上的时候,还可以指定它关联的一个模型。我们创建一个。先把这个FCTRLC给结束掉啊。
05:03
这个就不要了。创建一个商品的吧,啊,注意这个。名字啊,注意,这个名字一定要是和你模型的名字一致,这是它默认的一个约束,我们看看我们的模型是什么名字。是good是吧,好。那么我们这个模型工厂的这个名字啊,一定要是这个good,然后加上这个。这个factory才可以。清楚吧。啊,因为它有一个默认约束啊,当然可以通过这个改这个设置一些属性去改,但是我们用默认的就不用去进行额外的一些属性的一些配置。杠杠,Model等于。关联这个模型。在创建完成之后啊,会在。这个database里面的这个。
06:00
啊,Factory里面给我们创建一个商品的一个factory,我们可以在这里面写我们的这个。批量添加这个商品给我们随机生成的测试数据的一些属性。好。其实啊,这个内容啊,我们直接去看什么呢。Come。验证文件啊,就是商品添加的表单验证就可以了。就是我们这些必填的这个字段。走这里。哎,直接去用这些字段就可以了。啊,也就是我们把这些字段给它随机去加入就可以了,随机呢,我们可以使用this啊fer之前我们在听课里面是先先初始化了,就是先创建了这个F的一个。啊,模型实例再去使用的是不是啊,但是在这个。啊,模型工厂里面。它是有这个非克属性的。
07:02
啊,所以我们可以直接去使用。清楚吧。啊,我们抬头的话去。找一找用什么方法。Title,呃,输出文本就可以了啊,这个我们可以指定长度输出大概。二三十个文本就可以了。20个文本嘛,嗯。接着。应该还有个优势ID。你看我们的表迁移文件。找到商品那一块儿。是不是还有一个UID是必填的?所以把优势ID给补上。由此ID直接写一就可以,我们默认会有一个创建一个超级管理员的一个用户,ID是一是不是?这是个啊。
08:00
嗯,分类。分类呢?我们只取什么?只取?等级为三的分类。也就是说,第三级分类。啊,这里需要去在数组里面去随机,来我们看一看从数组里面去随机的一个方法。啊,这个就可以啊返回。随机返回数组中的一个元素。凶他啊。List。呃,那这个速度就不是他了啊,而是我们的这个分类的ID,三级分类的一个ID。看一看。也就是拿这个首先是分组为它的,对吧,Level等于三的对不对,好,你把它ID都写上,但是你。肯定不要一个一个去写,多麻烦呀,我们是可以在这个前面去查询相关的一个分类是不是啊。
09:02
啊,或者直接在这里面去写。分类的一个查询。Model,然后where。Level。啊,等于三的。使用。PLCK啊,直接获取这个ID的这个数组就可以了嘛,对不对啊。如果。你想说只拿禁用的,不是只拿不禁用的,正常的,你还可以加上where space等于一是吧,当然我们这个,呃,直接就查这个就可以了。它等于等于三的啊,这样使用拉ID,这样我们就得到一个三级分类的一个ID的一个数组,用它去随机返回就可以了。好。描述,描述也是文本啊。只不过让它长一点嘛,40个字的一个文本。可以吧?接下来。
10:04
价格,价格应该是。返回。啊,随机的这个数字就可以。生成随机整数,这是是一个范围。所以我们就用这个啊。是this里面的。价格我们最小是一,然后最大是。写多一点。我们的价格因为是这个啊,整形嘛,存到整形,所以最小的单位我们是存的是分嘛。啊,库存。也用整箱库存呢,就稍微小一点就好了。好。图片。
11:02
还有这个图片的一个数组。对吧,还有这个细节,我们先把细节处理了,商品的详情细节可以使用文本这里啊这个方法去生成几个段落。然后我们把它改成处事,将段落连接在一起,生成一个字符串。好,那就用这个吧。给他啊。接下来去处理这个图片,还有这个小图。他有这个生成图片的方法啊。可以看一下。往下找。好,这里有生成图片的方法啊。
12:05
生成图片并保存到本地。我们直接使用线上的就可以,它这个比如说这个方法,它会生成一个这样一个地址。啊,这个我们就可以去。就是说访问这个地址,得到一个随机的一个图片啊,来看一下。这个网站可能是因为强的原因就是。打不开,所以呢。我们不用它,那用什么呢。我给大家找了一个在国内能打开的啊,就是这个地址。这个地址呢,是在我们国内能访问的啊,这个我们就关掉。这里可以配置我们图片的一些参数,然后去创建,创建之后数这里有一个地址会给到我们,对吧,然后我们去。访问这个地址,每一次都会得到一个不一样的一个图片,看一看。看到了吧,啊,这个在我们国内是可以打开的,我们就用这个。
13:01
每次访问图片都是不一样的啊。所以说。啊,关于图片这里。我们就不用它的方法了,我们自己啊,把这个地址写上就可以了,就用这个地址吧,好吧。好,这是一个数组,数组呢,你就多写几个。反正每次他访问这个地址,图片都是不一样的嘛。对不对啊,这样我们商品就完成了啊。接下来测试一下。看一下怎么测试手册,这里可以使用make方法去生成一个实例啊。这是定义啊,定义好之后。啊,这里有提示,可以去改它的这个原环境啊。回调用不着。嗯,使用这里,然后我们去创建模型里面,这个你一般创建完模型,它给你带的就有。啊,就帮你使用了这个。
14:00
去。比如看我们的商品的模型是不是你用了,所以可以直接去啊使用这个模型工厂。接下来我们找一个地方去测试一下。嗯,我们直接在首页去测试吧,好吧。啊。来找到首页的控制器。Index啊,我们在这里先测试一下。Dota啊,一个商品等于。商品的模型,然后使用它的factory方法,使用make方法去创建一条啊测试的数据,注意它是,呃,就是说临时生成一条数据给到这个模型实例,知道吧,他不是去写入数据库的,清楚没有,手势上面应该有说。啊。使用看的方法可以创建多个模型的一个集合,然后使用make可以接创一个。
15:03
我给你看看在哪。啊,这里说啊,使用make方法,它会创建这个模型,但是不会将它保存到数据库中。好,我们现在临时测试就先先用啊这个make,然后直接这个good啊,接着在首页的API里面来进行访问。尝试一下啊。是不是拿到这个商品的数据了。对不对,包括我们这个图,还有这个都有,是不是好,包括这个。呃,商品的这个详情。是吧?标题。然后描述每次请求都不一样。看到没有,每次请求都不一样啊。是不是?如果加上这个count,它可以可以我们生成。啊,一定数量的一个集合,比如我们形成十条。
16:01
哎,就是一个数组了,它就有十条。那接下来。我们想办法把它存到数据库是吧,存到数据库呢,可以使用。往下找它有一个。方法吗?持久化模型啊,就是存储数据库的。哎,可以使用它的create方法,并且加上那个count啊,可以去。存储到数据库。啊。接下来我们再想一个问题,我们在哪去?就是放我们这个。生成测试数据的代码。对吧,你总不能就放到这个控制器里是吧,我们测试完再删掉是吗?肯定不这么用。可以去创建一个数据的填充文件,用来填充商品的测试数据。
17:21
在这个里面啊,去写去添加。我们大量的商品的测试数据。清楚吗?嗯,这个呢,是因为我们测试的时候才会去用它去添加一些测试数据,所以就不写到这个里面了,不写到这个数据线充里面。啊,这个数据填充,这个默认的填充里面只写一些我们需要用到的正式的一些数据。像这样的填充数据啊,我们就都写到这个里面,然后用用的时候呢,指定这个类去使用就可以了,好。在这里面。生成啊。大量。测试用的商品数据。
18:04
使用。商品的模型。哎,使用它的factor方法,你要是这么去使用啊,使用模型使用factor方法。一定来保证你模型的名字和你的这个。Factory里面这个名字的前面的一部分一样。它这是一个默认的约束,你不一样的话,就它就会报错,找不着这个factory知道吧。来使用他的count方法创建100条商品。啊。接下来。使用C进行持久化。好,这样就完成了。那。我们这个商品的迁移啊,这些数据还有一些字段需要补充一下。哪些字段呢?来看一看。找到商品这里啊。是不是,还有是否上架,是否推荐,是不是。
19:00
看到了吧。啊,所以我们去随机啊,这两个,比如说上架和不上架我们进行随机,然后推荐和不推荐我们也进行随机啊,这样我就可以帮我们去生成大量的一个。哎,可以用的一个测试数据。接着去改一改。啊,改一改这个。Factory。再加两个字段啊。Is on。它呢是在呃两个数之间随机,我们看看随机用哪个方法。嗯,其实用这个也行啊,用这个也行。啊,用这个方法也行。因为它是在数组里面去随机,嗯,输出数组的数据嘛,我们数字里面给零一不就行了吗?让他随机输出零一对不对,好接下来复制一个把我们的意思啊。
20:05
好的。小栏目。这里少个括号。这样的话。啊,就是是否上架,是否推荐也有了。然后还创建了一个数据填充的一个。累。在这个啊,在这里,在这个填充的类里面去创建商品的一个数据啊,创建200条吧,或者500条都可以,500条。接下来只需要运行这个数据填充就可以了,运行p p artisan DB,冒号sit,运行指定的啊,要加上杠杠,Class等于。来回撤。啊,创建成功,去商品表看一下你的数据。
21:04
这样是不是就有大量的我们的测试数据可以用了?是不是这样的?接下来去看一下首页啊,之前我们的首页是没有商品数据的,现在看一看啊。分类数据是有的,对不对。呃,商品数据也都有是吧,因为我们这个商品数据比较多啊,所以返回了很多条。啊比较多啊,所以说啊,首页找到首页的控制器,在返回这个推荐的数据的时候啊,你要么做好分页,要么就限定指定的数量。啊,分析的时候可以进行这个流加载,让这个鼠标用户滚动的时候去加载这个数据啊,比如说类似于京东这种的。找到他下面。注意它这个下面,你看当我划到底下部的时候,它有去加载后面的数据对不对,就是这是做了分页的啊,所以我们要么去做这个分页,要么你就把数量给限定死,就比如我们首页就显示啊40条。
22:12
也行啊。我们去处理一下这个首页的控制器啊。商品。这里。嗯,简单的,我们就取指定数量的吧,啊,分页的话就先不做了,取个20条20条推荐的商品。来看一看。啊,现在数量就会少很多啊。接着啊。去写这个轮播图的。这个模型的工厂去生成轮播图的这个测试数据。哎,皮P阿。Make a factory。
23:00
啊,这个名字一定要和模型的名字一样,然后加上factory就可以了。刚刚model等于。Sli。接下来去写。轮播图的这个牵引啊。看一看轮播图都需要什么字段?Title URL。就是跳转的链接。Imagine。Have that。来,抬头。抬头的话,嗯。直接还用这个title就可以了,用这个T就可以了。URL就是点击跳转的链接啊,给空就先不写了,然后有个might这个链图片。
24:03
图片直接还复制这个地址,因为这个地址我们访问的时候,它就会生成随机的图片嘛。啊,但是轮播图的这个大小我们可能要调一调啊,我们先看看什么样的大小合适。轮播图一般。啊,这个宽改成1920。高的话。320或者400都可以啊。啊,一般的摸图啊,是这样的一个。可是。他这还没加载完,所以下面还有就是1920乘以这个400就是可以啊。所以。我们轮播图啊,这里用这个地址吧。接下来还有状态。就是说启用不启用,直接让他启用,本来就是用于测试的数据啊,直接让他启用就行了。
25:05
啊,看还有什么字段。SEQ排序。啊,排序。排序。直接呃,生成随机的数字吧。生成这个随机的整数。在这里啊,生成随机整数。直接从那里复制。这样就行了,生成一个排序。啊,不连续没有事儿啊,不连续没有事儿。呃,接下来去创建。轮播图的数据填充类。是的,死的。
26:02
好在这个轮播图的填充类里面。去创建。轮播图的测试数据factory。Count创建四条就够了啊。C。我们来执行一下他啊。Art make。不是make,是DBC杠杠拉指定要执行的填充的类S。啊,四条看一看数据库。轮播图这里有四条是吧,有有我们的title,还有我们的地址,然后图片的这个地址写上,我们去访问的话是没有问题的。是可以访问的。
27:02
又给我们随机一查啊。当然这个速度也是比较慢的。毕竟。嗯。这个网址。不是我们国内的。好。这样的话,商品。还有轮播图的数据。就都有了,我们的测试数据不够的话,我们再执行就会再次继续给我们加。一定要区分清楚啊,我们这个填充啊,这个数据填充是一般我们系统必备的,就说一定会用到的一些填充,比如说权限。是不是比如超级管理员的这个账号。比如我们系统的菜单是吧,啊,比如一些分类的信息,当然这个分类可能是后期录入,也可能是填充进来啊,这个我们就先放这啊再说。而我们的其他的这个。啊,像商品啊,像这个没通过,这些都是测试用的数据,所以我们不放到这里面啊,这样当我们的项目上线的时候,就是部署到生产环境,我们执行。
28:00
这个迁移啊,它会默认默认会执行这个里面的迁移吗?就不会去生成大量的这种啊测试的数据了啊,就可以去录入我们真正的这个商品。首页数据现在是完整的都有了啊。但是我们会发现一个问题。对吧,因为我们的存储使用的是阿里云oss。就是在写后台管理的时候,所以这个cover,我们如果真正的项目上线之后,Cover存储的是。就是一个文件的一个名字对吧。然后想一想我们之前写后端返回商品的这个列表。是不是用了transform,然后生成了一个car-URL的一个处理后的一个字段。来看一看我们的穿刺风吗?就到商品这一块。是不是额外的返回了一个URL,因为我们数据库存的这个cover是一个文件,就是说图片的一个名字嘛,对吧,我们要连上oss的域名去生成最终的一个URL。
29:06
是不是所以首页。啊,再返回首页数据我们也要给。增加一个额外的一个。这个字段清楚吧。啊,好。但是因为啊。我们先把那个都关掉啊。呃,因为首页我们这里返回的不是一个啊,就是说比如说商品集合,或者是中度集,我们返回了很多的一个集合,这是三个是吧。你就没法去用了。啊,没法用这个算的方法。当然你也有办法用啊,当然你也有办法用啊。暂时用完之后,再从这个响里面去把数据转换出来。啊。我给大家演示一下啊,当然不推荐给大家,可以给大家演示一下啊,首先啊,这里写这个this。
30:03
Response。上次缝。啊collection啊集合,然后是我们的商品这个集合,接着啊,你用一个商品的。好。先看一看这个结果是什么。啊,轮播图的是没问题的。分类的也没问题,主要是看这个商品的。你会发现哎,它是这个hier啊什么的,对吧,这些信息。看到了吗?而且也没有我们穿后的一些数据。是不是?啊,它是一个响应啊。我们在响应的时候啊,使用它的这个。在使用。啊,这样是能拿到就是transform以后的一个数据的。
31:02
就什么啊,来看一看。直接拖到底看到上面这块,但是啊,这个结果,由于由于我们用的是get content。啊,所以这个结果它是一个字符串,你看锁好长。是不是一个字符串。是把这个所有的商品你看就转成这块,有我们的date属性对不对,也有这个Co-UL是吧,好,接下来只需要把这个。字符串转数组就可以是吧,杰森。De扣的哎,把这个字符串放这,然后处转成数组,然后这个你不加也可以啊。再看。直接拉到上面这里,可以看到有了这个CO2-UL是吧?啊,并且这个链接是有问题的,等会我们再来处理这个辅助函数的问题,我们先把这个传方的问题给处理掉。是不是有了,是不是还也有了这个PUL。对不对,好。
32:01
啊,但是啊,不推荐这么去用啊,不推荐这么去用,虽然是可以啊,不推荐这么用。首先我们首页要使用到这个商品数据,仅仅是需要商品的一个啊这个图就可以了。不需要他那些。就是小图浏览的那些图。对吧,啊,只要商品的一个。啊,这个cover图就可以,哎,这时候我们可以选择一个更好的一个选择,那使用什么,使用修改器手册在这里啊。在模型这里面一个修改器,也就是说我们可以为我们的模型去增加一些额外的字段,或者去修改它指定一个字段。啊。定义一个修改修改器。我们去找到上品的模型。Model。商品啊。在这里吧。
33:04
方法写到这啊。Get啊,接着是你字段的一个名字。命名用驼,驼峰。比如,我们要增加一个cover URL。URL啊,这样一个额外的一个字段。啊,不要忘了。写上这个attribute,这个是一定要有的啊。首先是get,然后是这个,这些是要写的啊,看一下手册。对不对啊,只有中间这个才是你字段的名字。知道吧,如果你的这个字段是下划线,你看比如你first name,你这里写的话,你要用驼风,知道吧。那这里可以写return,我们就是说访问这个属性的时候的一个内容啊,我们先个。This this表示这个模型嘛,当前模型this里面的。
34:05
好吧。啊,先直接返回它啊。然后。好,先这样啊。接着你来刷新啊。找到上面那一块。是不是没有没有考考用L。对吧。啊,只有当你使用的时候,它才会有。比如说我给你来测试一下。我们商品这是个集合啊集合。我直接在这return啊,Return这个商品,这是个集合,集合我可以取第一条数据,是不是第一条数据,然后我访问他的。靠二杠用20性可以吧。它是个集合吗?集合我用first取第一条。第一条数据可以啊,然后取第一条这个数据,然后使用它的Co-U2属性,原本我们的数据库里面是没有这个字段是不是。啊,但是我们在模型里面增加了这个修改器嘛。
35:03
访问一下试试。啊,没有内容,没有内容。这个名字可能有问题。这里是。Co啊,这个我们应该访问Co。COER。这里好像也错了。This cover Co。来一下试试。是不是有了?啊。看我们访问的是这个卡是不是可以拿出值了,好,但是我们如果不访问这个属性呢。来看一下。他是没有携带这个属性的。看找的商品那一块儿。是不是没有?啊,这明显不符合我们的预期,对吧,我们想让他自己带上这个字段。啊,这时候可以去给模型配置一个属性。叫。有喷子啊。
36:00
受保护的一个喷子啊。然后把我们要额外附加的字段给写上。我要额外附加CRL啊,它就会触发这个方法返回它,嗯,当然我们不返回它,我们要返回谁返回OSUL,然后把这个K传进去。要返回。这个OSUR处理后的一个地址。可以吧,把注释写了啊,最佳。额外的属性。OSURL。下面再来测试一下。直接往下找到对商品那里。嗯,看一下啊,是不是就有了这个字段。对不对。但是这个地址明显有问题,因为我们数据库存的是这个带HTTP的。
37:01
所以他前面又给我们连上了这个。这个阿里云的OS地址。对吧。啊,所以我们这个辅助函数还要去优化一下,优化什么呢?就是我们判断,如果你给的这个K里面已经包含了HTTP或者HTPS,那我就不给你去连接oss的这个域名,我就直接给你返回原地址就可以了。接下来去优化一下这个辅助函数。CTRL加左键可以直接点进去啊。我们就不能这么简单的去返回了,要增加一些判断的条件,比如说。如果没有。没有K啊,也就是说他没有这个地址,就传了一个空的一个内容,那我们。啊,直接返回空就完了嘛,If I'pity。啊,直接。
38:01
那个空就可以了是吧?啊,如果K包含了ATV等啊,是一个完整的链接,完整的地址啊,直接返回也就不做处理,直接返回啊衣服。检查这个K啊,是否包含HTTP。好,或者。这个K。是否包含HTPS对吧,再或者。嗯,比较长就换下来把它。再或者什么呢?是否包含啊date。Image啊,为什么加个这个呢?就是说我们贝斯六四的这个前缀是他啊。
39:05
当然这么判断会有一些问题啊,它这个函数是,呃,返回它在这个字符串里面出现的一个位置,一般如果它开头的话,它的结果呢,就是零零的话,是不是if也不通过。对吧,所以我们这里就是用。这个全等于去判断false,就是说它不存在的时候会返回false嘛,然后存在它会返回它的索引位置嘛,是不是这里就用这个判断啊。如果。这些啊,直接。道德黑啊,原路返回就不给你做处理了。啊,否则的话,才我们才认为它是一个阿里云的一个,可以给它连上阿里云的一个地址。改完这个辅助函数之后。再来看看我们的结果。诶,是不是考幺二就是它了啊。
40:02
如果我们啊,Cover是存的oss这个文件的K的话,就是文件名的话,那这里它会给我们连上阿里云的那个域名啊,如果我们存的是直接就是这种完整的域名的话,就直接给我们返回了。这样前端的小伙伴啊,在请求这个接口去拿到这个数据的时候,就可以直接去使用这个字段了。这里我们使用了。修改器啊,去增加了额外的一个字段。有时候这么使用非常的方便。手册里写的比较详细啊,比如说定义这个访问器,包括定义这个修改器。包括类型的一些转换。啊,在这个手册是在这个修改器这里面。学会了填充测试数据的方法之后。我们在开发阶段就可以去添加大量的测试数据去方便我们的开发。
我来说两句