00:00
这节课开始就开始写。我们。啊,前台相关的一些功能。首先我们来完成首页的一个数据。作为一个商城的首页啊,一般我们会有什么数据呢?有这个分类,还有推荐的商品,还有轮播图对吧。可以随便去打开一个看一看,比如看京东。一般会有这个分类,还有这个中间的这个轮播图啊,当然还会有一些它热销的一些商品,我们的系统比较简单,所以我们就呃只写一个就是推荐的商品啊。就是它下面的这一部分。这个为你推荐啊,我们只写这一块,所以我们需要就是首页这个接口要返回三个数据对吧,一个分类。一个轮播图一个。啊,这个我们推荐的商品。接下来。啊,在写。这个功能之前。
01:01
我们要有一些。前面的一些准备工作,比如说要先创建对应的控制器,建立好对应的路由,对吧,然后再去写相应的一个功能。看一下。A controller啊,我们。前台使用的功能。就是要放到这个啊,外部这个里面,我们作为啊前台去使用。接下来去创建啊控制器。P make control。外部下面index ctrl。它会在这个外部目录下给我们创建一个index controller啊。来看一下。是不是多了一个index ctrl了啊?在这个里面,首先我们去继承这个base control啊,Base controller啊,里面有我们引入的这个片的这个har。
02:09
接着去写一个方法。啊,用来返回首页数据。啊,那接下来去写路由。Resource。Root。就是这个里面写我们的路由啊。如果你感觉这个名字。和我们的这个路由名字啊。不匹配,想一致的话就可以,你可以把这个文件名给改了,来改一下吧。就是也改成API好吧。接下来。这里面的命名空间啊,它自己改的,因为我们用的是这个pvla姆,就他用他检测到你这个文文件夹的名字才能改变,它里面的这个类,这个命密空间也会改变,如果你使用的其他编辑器,你可能要手动去改一下啊。
03:05
接下来去写我们的路由,首页的数据一般不需要登录,所以我们放到外面,首页数据定一个get斜杠。嗯。Index。后面是我们的。控制器。Index里面的index方法啊。Return一个。啊,先点数据,我们先看看路由能不能请求通。把这些都关掉。来,先看一个。Get方式啊,api.test AP。哎,好,Index。
04:01
嗯,可以请求到是吧,接下来就去写我们的数据就好了。轮播图数据。啊,还有分类数据。还有什么,还有我们的商品啊,推荐商品啊,大概我们需要这三个数据来一个一个写一下轮播图。直接从数据库里面去查询对应的轮播图就可以了。啊,但是在查询的时候要注意,我们轮播图是不是有一个状态,有一个呃,禁用和启用的状态,我们要去查这个所有的启用的就禁用的就不查了,States啊查这个状态等于一的。啊get就可以了,不用分页啊,如果这个状态这个值你不确定的话,可以去迁移文件里面去确认一下,就是我们在建这个表的时候,我们设定的这个值是什么。这里是了吧。你看是一是正常,所以我们查这个S等于一的。
05:03
并且还要干什么,是不是还要排序?对不对,我们还要按照这个SEQ啊进行排序。默认它是正确,从小到大啊,我们可以自己去。改成倒序或者正序,根据我们的这个。设定。啊,我就默认就可以按照正序求来。接下来轮播图的数据有了啊,处理我们的分类数据。分类数据。呃,我们之前写的这个help文件里面有做好的分类的一个缓存,是不是看一看。往上涨。缓存所有的分类是不是,然后这个是缓存没被禁用的,然后我们给前台使用的话,应该是使用这个没禁用的,一般我们后台管理的时候才会用到所有的一个分类。
06:07
对吧,不管我们添加商品也好,或者是说在商品搜索里面也好,或者是首页显示这个分类啊,都是显示的是没,就是说没有被禁用的,就是正常的能被使用的分类,所以我们用这个方法。好吧。接下来。写我们的推荐商品。使用商品模型去查询商品呢,我们也有几个条件啊,你必须得是。上架的对吧,下架的商品我们就不查了。Are ison等于一。而且我们首页查的是推荐商品是不是,所以他的这个推荐。也得是一。就是被推荐的。
07:00
啊。接下来。啊,直接get获取就行。上架的推荐的直接会就可以,最后我们把这三个数据返回就可以了啊,使用直接。On。方法,返回一个数组。死。商品。啊,按照顺序来写吧,先写个分类吧。来,现在测试一下我们这个首页的数据,看看对不对。
08:02
对了吧,你看所有数据都拿到了是不是啊。没有数据很正常。之前我们在写完这个后端的。后台的这个项目的时候啊,是不是重新执行了表的一个迁移,把所有的这个啊数据都给清空了,对吧,只留了一些。有了什么呢?是一些我们系统需要的一些数据,比如说权限。比如说我们的菜单,因为这些是我们系统,即使是部署到生产环境也是需要这些数据,所以我们把它放到了数据填充里面。在这个里面。看这里啊,是不是填充啊。这些数据啊,菜单权限,还有一个用户。接下来我们再去创建一个。数据填充的一个类,去填充分类的一个信息。
09:11
创建成功。好在这里。啊,这里我们定义一个。分类的一个数组。把我们需要填充的一些分类写到这里面。时间关系,我把提前准备好的这个数据。给大家直接复制过来用啊。我们准备了。两个啊,顶级的分类,你看莱是一档,一个是电子数码,还有一个是服装衣帽。然后还准备了,就说各自准备了两个二级分类,比如说电子数码里面的手机还有电脑,对吧,包括服装里面也有。
10:09
接着二级分类里面还有各自的两个三级的分类啊,比如说这个华为小米。啊,电脑里面是联想和戴尔,就是这样的话,我们的一个三级分类啊,接下来就想办法把这个数据给插入到数据库就可以了啊。在下面写啊,填充啊,写入到数据库。啊,因为它是一个数组,所以我们可以直接用for。嗯,给一个变量啊。Do是这个意思,就是我先去填充这个一级的顶级的一个分类。
11:01
或者dota Le都可以啊。来。接下来。嗯,因为填充的时候,我们使用的时候呢。是不能带这个秋顿的啊,不能带这个。不能带这个的,所以我们要把它给删掉,对吧,但是如果删掉以后,后面我们在填充二级的时候还要用。这时候你可以临时给一个变量啊,临时给一个变量。比如说。L杠。等于这个L一级的这个。对吧,然后我们把这个tap里面的。这个求证啊,给删掉。之后使用分类的模型。添加就可以了啊。啊,把这个temp给添加进来,这样的话,因为就是删掉这个求证之后,添加它的时候,它里面就不包含求证这个字段,你就可以添加成功,它的返回结果是一个。
12:00
啊分类啊,也就是一个L1的。啊,Model实例对吧。啊,我们为什么要这么做呢?是因为我们在给他添加子集的时候,它的子集是不是需要用到它的ID对不对,他子集是不是有个PID需要用它ID。知道吧。你看我们添加完成它它的这个子集啊,比如说这个男装或者女装,它是不是需要用到一个PID等于它的这个值才可以。所以这里我们使用啊create,并且。他给我们返回添加后的一个模型,这时候我们就可以使用它了。那接下来开始处理,添加它的二级分类。二级分类啊是谁呢?是这个L1里面的这个丘顿对吧,但是它里面有多个,所以我们还要再写一个负一。L1 dota l2。L1里面的啊,丘等,你看L1里面的啊,这个丘等是不是。
13:02
就这个是吧,就是这个里面吗。它是不是也是一个数组,它有一个。对吧,有一个两个数据数组,所以我们要循环它,嗯,循环去一个一个的加,然后在循环的过程中呢,把它们的子集同时给加入到这个对应的二级里面就可以了。来接着添加二级。嗯,二级的处理和一级一样啊。也是这么这么着。直接复制这个代码。把变量改一改L2。2.temp。好,这里得到是一个L2的model。啊,到第三集的时候啊,因为第三集最后一集它里面没有children顿这个字段了,所以我们不用去删除这个children这个字段,那可以直接使用current many直接。啊,使用模型关联,然后。直接去添加它的关联的一个数据,它会自动帮我们维持这个PID啊,我们直接使用这个模型,这个模型里面呢,它有一个。
14:09
啊,求证的一个关联方法啊,我们点这个模型点进去,你看一看是不是有个关联方法,我们使用模型的关联啊,这个方法去添加数据的时候,它会自动帮我们加上这个PID,就不用我们再手动加了啊,当然我们添加这第二个的时候啊,忘了加PID了啊。就是L2TA里面的这个PID。要等于谁等于这个L1里面的ID啊,这步我们忘了不上。啊,那到最后一集L3的时候,第三集的时候是这样,直接使用第二级的这个模型,使用它的这个关联的这个。啊,初诊方法。啊,它里面有一个科。Correct money里面支持一个二维数组,可以批量添加,那我们把谁取出来,直接把这个它的这个求顿取出来,你看它是不是二维数组,这个求正是不是二维数组,可以直接就把它给加进去,这个PID的话自动会给我们补上。
15:06
啊,自动功能维持住。哎,就是要。呃,用到这个L2里面的。这个求等。对吧,那为什么定一个这个临时这个变量,因为这里我们要删除啊,所以你如果不给个临时变量,你直接删掉后面我们这里就用不着用不到了。这样就写到数据库了。最后因为我们的分类啊做了缓存,所以不要忘了清除缓存。Forget开啊啊清除完成好。接下来我们来执行一下试试啊,先打开数据库。找一下这个分类表。
16:02
这个是我们执行。数据填充的时候,填充到我们这个菜单的这个数据啊,现在我们来填充这个分类。P artisan。BD冒号CD。杠杠class等于指定我们要执行的类,如果你不指定,它会默认去执行默认的这个啊,又把权限什么的迁移一遍,所以我们要指定我们的分类。是这个吧。啊。啊。杠杠啊,少个杠。等于。添加成功。来刷新一下。
17:01
看一下我们的这个分类的数据啊,它的这个ID啊什么的,对不对。嗯,首先添加了一个电子数码啊,它的这个PID是零,是顶级分类,然后状态是一啊都是。启用的。然后等级是一啊一层第一层,然后看手机,手机的PID是谁,PID是19。它是属于这个电子数码对吧,然后它LEVEL12。包括这个小米,小米它属于手机,所以它的PID是20啊,往下接着去看服装音O这些分类是对的啊,说明我们这个签文件没问题。清楚吗?啊。那接着呢,啊,如果我们感觉。啊,这个分类其实就是我们。呃,项目部署上线以后要用到的分类的话,可以把它加到这个里面。清楚吗?把它加在这里面,这样我们在执行迁数据迁移,然后同时指定填充的时候,就可以把这些都填充上。嗯,写错了啊。
18:04
啊,牵引。这个时候,哪怕我们去啊,回滚所有的迁移。就是重新刷新出的迁移,再去填充,也会有这样的数据存在。啊,我们来试一下。嗯,既然要回滚的话,我就把分类。分类放到。放到。他前面吧,啊,这样的话,它的分类会先比它创建。方便我们去看。这都一样的。重新执行迁移。Refresh,然后杠杠sit,在刷新迁移的时候同时进行数据填充回撤。啊,现在是正在。
19:01
啊迁移,这是这就是数据填充,它是先回滚啊先回滚,然后再迁移,然后再填充。好,接下来去刷新一下我们的数据库。对吧,啊,因为我们先执行的这个,呃,商品分类的填充。接下来去看一下接口。看一下数据的返回。是不是有分类数据的返回?但是轮播图还有商品并没有数据,对不对?这时候你可能会想,哎,我们再给这个轮播图,或者这个商品也写一个数据填充呗。啊,我告诉你没有必要写啊,因为像分类的话,我们可能是系统真的是需要这些分类啊,所以我们写成。数据填充没有问题,但是像轮播图或者商品。啊,一般都是我们在。项目上线之后去重新录入啊,新的这个轮播图,新的这个商品,所以说我们没必要去写。
20:01
但我们测试啊,确实需要一些商品数据。那你可能说了,那我能不能写一个数据填充,然后我只在测试的时候啊,我手动去执行指定的这个填充,对吧,我不放到这里面。可不可以啊,当然可以,但是你要自己去写一个手中的一个填充,你要像这样,你去写一些数组,然后或者写一些循环去一条一条创建的这个商品,对吧?那你能保证你的商品它名字不一样,什么都不一样吗?所以。啊,数据填充不太适合我们去去填充一些测试的一些数据。其实我们有更好的方案,那就是什么?就是我们的数据库测试啊测试数据。使用我们的数据模型的工厂去填充测试的一些数据。我们将在下一节课。去讲测试数据这一块的一个内容。
我来说两句