00:00
来继续完成啊,分类管理。首先创建一个。分类的模型,同时生成迁移文件qp make。Model。GORY。加个杠M,同时生成数据迁移文件。这个模型创建完成,然后迁文件也给我们创建完成,我们在迁移文件里面去。完善我们的表字段。分类啊,首先有一个字符串类型的啊内幕。分类名称。复制一下啊。接下来有一个。
01:02
整形的啊。PID就是它的一个负极,默认呢,我们给零就是顶级的一个分类。腹肌。接下来。还会有一个什么呢。就是它的一个状态是这个分类是被禁用了还是被启用。Ten。States。默认值给一正常啊,就是状态。零是禁用一是启用啊。
02:01
接下来。再给一个ten level。就是这个分类的当前的一个级别,是一级分类还是二级分三级分类?啊,我们用这个,呃,记录是比较简单啊,或者我们用那个pass啊,一层一层的去记录它的一个层级的一个关系也可以。分类级别。123。啊,默认就是一级分类,顶级的一个分类和这里对应啊。好,这些字段啊,就够我们使用了,然后它还有一个更新时间和添加时间啊,有个自动挡的一个组件ID。接下来运行迁移给我们生成这个分类表。你看一看,这里面是没有这个分类表的,现在。来执行迁移。
03:02
PP啊,刚才他脚本虽然执行完了,但他这个终端还没有结束啊,所以我们用CCTRL把它给它结束掉。啊。执行前移。啊,这时候就会多一个这个表。是不是这是我们的分类表,你注意啊,我们的模型是单数,但是它会和啊,这个表里面的这个复数形式代表去做默认的一个对应啊。啊,这是我们创建的这些字段。啊,当然现在没有数据对吧,所以我们要去写添加分类的这个功能。先写一个,呃,控制器。用来写我们分类相关的代码。Make control了,不要忘了把它放到对应的目录下。我们放到下。
04:16
啊,这里有一个分类的控制器,我们让它也继承控制器的积累。啊,这个我感觉我们的这个分类,你看有添加,有修改,有详情,应该也是建这个。API的比较好,把它删掉,建这个API的这个资源控制器。嗯,加上杠杆API就可以了。这时候会给我们多生成一些。我们。用到的一些方法啊。继承贝斯康。接下来去写我们的路由。那我们注册这个分类相关的。
05:00
路由。首先啊,定义一个资源路由啊,我直接复制这个啊。分类管理。资源都有。把这个改了。然后。我们要使用什么方法,这个方法用的就比较多了啊。等会再说啊,等会再说,我们先把这个。给删掉不用,然后把控制器改一改啊。CTRL。查看一下我们的路由。有分类相关的,我们要添加分类,这个会用分类列表,这个也会用到分类的详情,也会用到更新分类,也会用到删除可能。用不着。啊。删除,因为分类呢,它会涉及很多的东西,比如说这个商品,很多商品用了这个分类,你删除的话,那这些用了这个分类的商品怎么办。
06:07
你要把它们都删掉,还是说有有商品的不让删,当然你强行删的话,也是可以去做处理的,比如我们只删除没有被使用过的分类,是不是也行啊,所以我们嗯。太麻烦啊,就不做处理了,就不做删除了,你做什么这个一个状态的一个禁用和启用就可以了。这样的话,我们禁用的状态呢,嗯,就不让你再次使用了,但是已有数据已经使用了这些,嗯,数据的话还是让你去继续显示的。但是不让你去增加新的一个数据就可以了。嗯,那我们去加一个参数啊。Except啊,除了什么什么之外,我们除了这个啊,就是之外。看一看现在路由会不会少一个?
07:01
啊,是不是少一个了啊,这样就可以了,因为它比较多,我们就不一个一个去写了,直接排除掉我们不需要的就可以了。好,接下来。去完成一下我们分类的一个添加的一个功能。啊,在控制器里面。找到四套方法啊,把注释改一改,添加分类。在这里面去添加我们的分类。啊,添加分类呢,我们先看看分类都需要什么字段啊,首先。啊内是一定要有的,对吧。其他的都是可以没有了,因为我们创建这个表的时候,我会发现啊,只有这个内幕啊,就是我们的分类名称是必填,其他都有默认值是不是,如果我们都不填的话,它是一个顶级的一个分类,对吧?当然我们还可以接受一个PID的字段,所以我们只要这两个字段就可以了啊。先把这个关掉。啊,也就是说我们真正你必填的只有一个name字段。所以我们表单验证呢,只要验证这个字段就可以了啊,只有一个字段,我们直接在这里做验证,就不再去创建单独的表单验证了啊,直接在这做验证啊,用它的wall。
08:10
然后啊,里面写我们的验证规则就可以了,我们验证这个内幕,内幕呢你必须啊填。并且。并且。最大不能超过。16个字符吧。接下来我们来测试一下啊,这是四套方法,我们的API里面的。啊四套,然后请求地址是。Apiin,然后POS的方式请求这个啊复制一下。就到这里。这些先都关掉啊。
09:08
api.test。加上这个地址。提交。没有传talking,选上我们的talking。啊,Talking过气。重新去登录生成一下to啊。哎,直接提交就行,这个参数因为我们保存了有记录,所以参数都是我们默认着呢。把这个talking更新一下啊。名称不能为空是吧。但是这个如果你不想用他提供的这个消息,你可以去重写它的这个消息提醒啊。怎么重写呢?它还有一个第二个参数。可以支持额外的一个选项。
10:04
第二个参数,这是额外的一个选项,这是内幕。第二。Q。分类名称不能为空。是吧?再来提下试试。分类名称不能为空。这是我们的第二个选项。啊,因为我们写成单独的这个表单请求类的话呢,可以去。啊,写这个message方法对吧,那直接在这里面验证呢,啊,就可以去写这个消息提醒啊,其他的字呢,我们就不验证了。我们添加分类无非就是说啊,填一个分类的名称,再一个选择一个这个分类的所属的一个分级。对吧,要么你是顶级分类,要么你是啊所属某一个分类对不对,给他反选一个负极,就这么这么两个字段。那接下来之后我们就可以进行添加了啊,就是你的验证通过之后,就可以给你进行添加,添加使用啊这个分类。
11:08
我们使用方法啊。批量赋值啊把request。啊,物理方法,只要我们需要的字段。我们需要。一个name和一个啊PID其他的字段就不要了啊。啊,但是你要使用这个考虑的方法呢,进行批量赋值。就得在这个模型里面去配这个可以P赋值的一个属性。我们点进来CTRL键。啊,配置一个。Prop。Protect do f。这是我们可以批量赋值的字段,只有配了这个之后啊,才能去啊,使用create name PID。
12:04
注释写一下好。这时候就能。进行创建了啊。嗯,创建完成之后。一个响啊,就创建成功的一个响应类似。Response。来我们来测试一下啊,现在名称我。不传。啊,是我们的认证不通过啊,接下来呢,我们在包的里面啊,在这里面去传。一个name。比如说传个电子,电子数码。作为我们的顶级。累。比较。好,有一个201对吧,去刷新数据库,你会发现会多一条记录。
13:02
是不是?我来再来创建一个顶级的分类。服装衣帽。创建成功了是吧,那下面为什么呢。啊,为我们的电子数码里面创建一个二级的一个分类。这个时候我们就会发现问题啊,你看我传完之后,你就会发现一个问题什么呢?PID。来我创建一个电子数码里面,我创建一个手机啊。然后PID选谁呢?你既然要给到它里面,PID肯定是它是不是PID等于一。对吧。是不是?啊。接下来我们来提交。可以创建成功,而且去刷新一下数据库。
14:00
也串成了偏离也对,但是有什么不对呢?Level不对。嗯,他既然作为他的一个子类,他的这个level是这个。啊,这个二级对吧,它是二级分类才对,是不是。所以呢,我们怎么办?这个level我们再处理一下,就是level的话,它要等于什么,要等于它的负极的level加一才对,清楚吧。所以添加这里我们再优化一下。嗯。那我们再换一种方式。不使用这种方式了啊。使用对象的方式啊模型。等于六。
15:00
使用模型呢,比较方便,我们去一个一个的去处理它的一个值啊,当然使用这种方式也可以,我们提前处理好数组使用。就可以了是吧。啊,那我们继续使用前面那种吧,也行啊。啊。我先在这里获取到所有提交的一个值。接下来干什么?是不是要处理?Insert date,我定义这么一个数组啊。然后。这里直接插入它,那我在这里面一一处理我的字段啊就可以了,和我去用对象的方式创建是一样的。有一个name是不是name的话,字段比较少,我就不用这种方式了,直接就用它去input去获取这个name就可以了。
16:06
同样会有一个PIDPID呢,我也从request里面去获取。并且会给你一个默认值,如果获取不到就给你个零对吧,接着。Level啊,Level就不是从这个request里面获取了,这个我们先不要着急,我们要去这个也不要了,要去算一下,算什么呢?计算level就是它的这个层级。啊,无非就是啊,要查询他的这个负极啊。Level。我们直接为这个数组啊,直接在这附加level也行啊。不用去单独的去写。那直接在这个数组里面怎么写呢?Level啊,他。
17:01
就是说他要根据谁来决定呢?根据这个PID,也就是你request里面的这个。这个PID有没有值兄弟们啊,为了避免我们在这啊再复制一遍这么长的一个代码,我们把PID定义到上面可以吧,好。这里就等于PID,然后这里我们判断PID。等等于零,如果你等等于零,那就说明顶级的分类,顶级的分类我们level就是一可以吧,如果不是等于零。就说PID是有具体的一个ID,是有具体的一个负极的话,那这个。怎么写呢?啊,我们就去查询啊,查询分类表。Find。啊,直接通过do PID去查询对应的分类,然后去取它的这个level。让他加一啊就可以了。这里加个括号。这样的话。
18:01
啊,我们的这个。Level就会在就是它负极的基础上去加E。行了吧。但是有两个地方我们要注意啊,这里因为用到了批量赋值是不是,所以我们要把啊这个level也加到可批量赋值的字段中。这样的话,我们来测试一下。再次。啊,添加一个电脑也是为这个电子数码这个分类去添加一个电脑的一个子分类。提交啊201。看一下数据库。哎,这是我们的level就对了,是吧,它作为一个二级的一个分类看到了吗。那这个手机的话,我们手动改一下啊,因为他的数据不对。提交一下。嗯,接下来啊,我们再做一个限制,因为。哎,我们想做就是说最大三级分类,那肯定不可能让它一直无限的去分类下去,所以我们要对这个level进行一个判断。
19:07
对不对,如果你超过了这个。这个这个三级我就不让你用了啊,那在哪判断呢?在这啊,所以说我既然要判断level,那这里我肯定要获取到这个啊,你要执行了,就是说添加的这个level是多少对吧,那怎么办。那我只能把这个level获取的地方也放到了这里,是不是啊,让他用这个变量。好。嗯,接下来呢,是对他进行判断。啊,如果。就说if never。大于三了,就超过三题了,我们是不是可以一个。This。Response,一个error。啊,这个better request吧,就是错误的一个请求,然后给他提示消息不能超过三级分类。
20:04
可以吧?啊,这样如果是只有一个条件,就是说衣里面只有一个这个一一行代码的话,是可以省略这个大括号的。啊,你不使名也可以啊,这么写也可以啊。好,把注释写一写啊,这个是。这个是验证参数的,是不是验证参数。啊,这里是我们获取PID。然后计算level对吧。啊,这里是判断不能超过三级。超过三级分类。好,这个就是后面就插数据了,最后一直到返回,这样我们添加分类。啊,就完成了。有了分类之后,我们就可以去继续写我们的分类的一个列表。
21:04
来。在这个index里面,在这里面去写啊,分类列表。在写这分类列表之前呢,我先再添加几条测试数据啊,比如现在我们只有啊。一级分类啊,还有两个二级的分类,我想给这个手机这个二级分类呢,还有电脑再各自去加一下啊,这个三级的一个分类。啊,手机是三,电脑是四对吧。能PID13。啊,先给这个手机下加一个品牌,品牌是谁呢?比如说华为。这是一条。啊,再加一个小米。加两条吧,好,再给四我们的电脑去加两条,戴尔。联想。啊,这时候来看一下数据库。
22:03
我们的这个有四个啊,这个三级的一个分类,接下来去查你的分类的一个列表。Do。写负数吧,等于。用我们的模型去查啊,直接查所有。对不对。好,我们这个分列表就可以了啊。看一下啊,分类列表呢,是直接用get方式请求同样的一个地址啊,我们是资源路由,就是资源路由,就是会通过我们的不同的请求的一个行为和这个UR去请求对应的一个资源啊,我们post请求这个地址,它是一个添加啊,Get请求就是请求列表啊,这个在我们之前去拉的时候,在资源控制器里面已经讲的很详细了。当然get请求,我们这个参数其实都不用传就可以了。哎,是不是拿到了我们的分类的一个列表,对不对。
23:03
包括他的这个级别。嗯,我为什么啊,不使用蚕丝form,或者或者不使用这个。分页呢,因为我们一般在后台去管理这个分类的时候啊。啊,一般是怎么样的,展现的是一个页面,是把这个所有的分类都展示出来,并且让他按照这个树状的这个结构,就是说一层一层的去显示啊,就是有层次感的那种树上的结构去显示啊,很少见过,就是说对分类去做分页,除非你分类特别特别多。兄弟们。一般我们是啊,就是做一个树状的一个结构的一个显示。就是能折叠的那种,那种能展开能折叠,因为我们是API的项目,所以说很多的页面大家只能靠。这个脑补啊。哎,所以分类写到这里啊,列表已经算是完成了,但是。你可以看一下这个结果啊,这个结果是都给我们把分类给。给列出来的是吧,并没有层级关系。啊,当然。
24:01
我们拿到这个数据啊,比如说我们去啊循环按照他的PID进行分组处理也是可以的,甚至我们我们为了省事,你可以直接把这个数据给前台,让他们前台去处理也可以是不是,但是最好不要这样,我们给别人提供一个API,这个API一定要是完整可用的,所以我们后台要把这个分类的这个。啊,层次给处理好,就是它里面有多少。这个子集对吧,它的子集里面又包含多少多少子分类。这个我们要把它给处理好。再就是说对外提供这个API,让别人去使用啊,也让别人去使用起来感觉特别方便。接下来我们去处理一下它的这个层级关系啊,当然有很多处理方式,我刚才说到的就是一种,比如我们先全部查询出来。然后使用佛一起啊去循环去处理啊,当然这个是比较合性能的。你既然学了lover对吧?用了它的一个模型,就可以利用它模型的一些。
25:01
特性,比如模型之间的关联。我们让这个模型。他自己去关联自己。可不可以去取自己的啊,所有的子类,你看我们想象一个模型关系,比如说我们用户和博客,我们用户可以有多个博客,是不是,那用户表和博客表是不是产生了关联?啊,一个一对多的一个关系,那同样的,那我们分类也是我们分类可以有很多分类,那为什么就不能产生一个一对多的一个关系呢。一样的好,接下来我们写一下啊啊。分类的子类。那这个关联关系应该怎么写呢?Public方形求对,首先啊,我们当前这个类的,它的这个和。啊,这个分类表是个什么关系,它是有很多。类是不是,所以这个应该是一个一对多一个has many的关系,Return do this啊,Has many。
26:04
有很多谁,是不是有很多分类,有很多子分类啊,所以这个类就是分类表。好,分列表的表明啊,接下来关联的字段。啊,外键通过谁管理PID对吧。内建同学ID。啊,主键是ID好这样的话。我们就建立了一个啊。模型之间的一个关联啊,虽然是和自己进行关联的,但是它也是一个关联关系啊,那我们这时候在查分类的时候。就可以,怎么办去可以。啊,位置啊。这个。查询他的这个子类。是不是?来看一下。那这个就不能用all了,得用get。
27:01
是不是,你看电子数码它的子类手机和电脑对吧,好,然后服装衣帽它没有子类,然后这后面又查了一遍手机。然后手机里面出来了华为。是吧,这明显这个结构不对的,所以怎么办?我们应该是只查这个顶级分类。啊,作为第就是说最外面那一层,所以这里面加一个条件啊,Where。啊,这个就让他换下来。当这个代码比较长的时候,让他换下来,不要就是一行写的老长。围绕谁PID等于零是吧,或者level等于一都可以。就什么好。这时候我们再来看。啊,这时候你看只有ID1的对吧,它的和它的子类和ID2的这两个偏离等于零的啊,它没有子类啊,但是我们发现我们手机的这个子类没有是不是。
28:00
啊,手机的它的这个子类应该还有这个华为和小米。是不是?那怎么办呢?我们可以就是说嵌套去关联啊,让你的这个子类再各自去取你子类的子类。是吧,啊,嵌套与炸弹。看到现在我们的顶级分类电子数码,然后它的这个子类手机是不是手机里面有华为啊,有个有个子字段有华为,然后有小米对吧?好接着看和它并列的,和二级并列是一个电脑,电脑里面有戴尔。有影响,哎这样就。正确了是吧。但是正确了之后呢,我们来看啊,有很多字段,其实我们不需要啊,像这个时间。啊,我们。不需要。是不是?PID,我们也不需要。其实。因为你跟着他呢,你带上也行写着啊,主要这个时间啊,有时候我不想要把它处理掉,怎么处理。
29:02
我们再进行这个。啊,进行这个这个。预加载的时候是不是可以自行字段,比如说它我只要谁。啊,你必须得要PID,因为这个子类是靠PID和它的负极进行关联的,所以你ID都可以不查,一定要要这个PID啊,当然我们ID也是需要的。好,IDPID。啊,还需要什么。基本上这几个就可以够用了啊。好吧。时间我们不要level的话啊,可能也得要,那这样的话就是只是时间不要好接下来看一下啊。PID。
30:08
好了啊。这个要连着写,不要写空格啊。要不然它就会出问题,这里看一看,你看我们的里面的子类。是不是没有实验字了,只有这几个对不对,但是你会发现。这个外层啊,还有这个还有外层的,我们好处理外层的话,因为我们是查询,查询的时候我们加上那个select就可以了啊,这里比如我们加个select。外层的好处理。只查。ID。啊,写个数组啊。D PID name这就可以了是吧,这样外层也处理完了。啊,最主要的是中间那一层。中间这层不好处理是不是?
31:00
啊,这时候我们可以想象一个这个位置的一个特性with,它是不是可以啊,预加载多个啊。是不是我一个我写个数字我加载多个,我第一个我加载。给大家换一行啊,第一个我加载Q等。Din,可以吧,好,这是。再回车第二个,第二个加载它是吧,求顿下面的球顿也可以,所以这样的话就可以对第一个去进行这个字段的一个限制。可以吧,你看我可以就是说关联两个加载嘛,第一个我关联它的它的一个加载,只拿这些字段对吧,这是作为顶级的这个也就二级啊,二级的一个情况,然后接着去拿三级的一个情况,然后指定字段。都是可以的,是不是。好。嗯,这样就可以了,时间都没有了。这也就是我们需要的一个数据的一个格式啊。
32:01
但是写到这里你以为就完事了吗?没有啊,虽然现在已经可以用了,但是我们想象一个场景啊,嗯,一般需要拿这个分类的这种列表,或者这种层级关系的地方,我们想想都有哪些首页有时候需要分类是不是?我们在搜索商品的时候,搜索一页,就是说商品的这个列表页,我们也需要是吧,那我们这个后台。后台呢,我们。呃,分类的这个列表页需要对不对,需要这个结构,然后比如说在。添加分类。或者这个编辑分类的时候,我们需不需要把所有的这个负极给展示出来,让用户可以去选。是不是?啊,所以。怎么办?我们还要继续啊,对它优化,我们要把它就是说提升一个公共的一个方法,让其他地方都能使用。这时候我们应该想到去。啊,写这个全局的一个辅助函数。啊,自定义我们自己的辅助函数。
33:01
而现在。没有文件,所以我们建一个help文件,去写我们自己的辅助函数啊。建一个PP。Glp啊,一样,S har PP。哎,放到这个根目录放在这就可以了啊。啊,创建完成之后呢,你要在composer里面把它给,就是说放到outload自动加载里面啊,自动加载里面有一个啊files选项啊,它是一个数组,也就是我们要自动加载的一个文件,这里选择。啊也这个双引号杰森,它是比较严格的一个格式。就是把我们的help写上,哎,让它能自动加载我们这个文件,但是你配完这个自动加载之后呢,你要去刷新一下这个composer这个自动加载啊,Composer dump outload啊就可以了。好,这时候我们就可以在这个里面去写我们的辅助函数,然后在嗯,其他地方都可以去用这个辅助函数。
34:04
那我们就可以把你们的分类的列表去放到辅助函数里面。看一下应该刷新完成了啊。呃,先写一个函数去测试一下。啊,写个if if function,哎,就是函数不存在的时候,我们再去。常见的函数。Great tree啊。我们是让他。就是作为一个树状的一个一个函数啊。方。好,里面就放我们的这个代码。就可以了。
35:00
这里。哎,让它自动去引入我们的这个模型的。这个秘密空间。之后我们return这个分类。加个分号。那。写完这个辅助函数呢,其他地方要用呢,直接去用这个函数啊,用这个函数就可以了。来,我们来试一下。在这里去啊,直接return这个函数的这个结果,看是不是和我们的结果一样。结果是一样的吗?说明我们这个辅助函数啊生效了,也就是我们在任意地方都可以直接去调这个辅助函数去获取分类的一个。呃,结果好,接下来呢。继续去优化我们的辅助函数,肯定不可能就这么就完事了,是不是?啊,有的地方需要的数据不一样,比如说啊,有的需要两级就够了,是不是有的不需要这些,就是说禁用的就是space啊禁用的。
36:02
当然我们这里少查了一个字段,我们应该把也查出来。啊,把死的字也查出来。因为后台可能有时候还要看他的一个精神状态好。接着说啊,我们的这个辅助函数。啊有的呢,他不需要这个啊被禁用的,他只拿这个能用的,比如首页就是前端,比如首页的地方,就是还有我们搜索商品的里。啊,一般需要全部的这个只有哪地方用到,因为我们后台的这个分类管理里面啊,列表里面需要看到所有的。所以我们这个辅助函数还要继续优化,要增加一些参数,可选的一些参数,让用户可以自己去选择啊,决定自己要什么。清楚吧,好。首先。啊。写一个什么呢?写一个层级啊,写一个状态吧,Space默认等于。啊。啊,也就是你如果不传这个。
37:00
哎,我就。查所有的,那我这里可以写一个问对吧,啊在这。When。Dota就是当你传递了这个条件。啊,因为他有可能是谁呢,有可能也是。啊,这个零。就是零和一嘛。是不是?那既然有零的情况存在,所以说我如果直接这么放,这我们传零的时候,它也会被认为是false过不来,所以这怎么办,然后限制全等于啊。啊。应该是不全等于false。也就是说,只要你不是force,我就给你进行查询清楚了吧?我们这么判断是为了过滤到这个零的情况,假如用户传了一个零,需要拿这个纸巾用的。怎么办?你是不是这里就没法处理了,就走不了了,所以。先,这个时候我们要稍微严谨一些啊,查询构造器啊柚子。
38:03
去使用web的这个。然后do query,就是当你有这个力的时候,我给你加上这个V2条件。等于你传的这个space。好,这样状态我们就处理好了是吧?好,那我们来测试一下。现在我们不传。啊,没问题,都拿到了是不是好,接下来我。干什么呢?传一个啊一啊只拿没有被删除的对吧。好。啊,当然我们现在数据库里。啊,都是没有删除的,所以我们去删除几个,比如把戴尔删掉,看到没有。好,提交一下。啊。接着来看一下啊。刷新。淘过气了啊。再去这里生成一下talking。
39:13
找一下啊。是不是还有这个零呢,为什么,因为你注意一下啊。我们这个VR条件是写在哪里的,写在这个顶层的就是顶级分类的。啊,这个Y条件。是不是?而我们的那个子类呢,它是这里去控制的。对吧,所以我们还要分别对啊这两个预加载去写对应的查询条件。不让他去。查询这个这个被金庸的是不是。我们依次来改一下。啊,看我们数据库,我们改的这个是三级啊,我们先对三级做一个尝试,如果三级可以的话,再去改二级这个代码。对吧。那么我就这里啊,就不直接写它了,它呢是可以写一个这个比包函数的啊去啊进一步的去查询啊,对它进行。
40:07
写一些查询条件,这些手册上都有啊。好。但是需要用到谁呢?用到这个states,所以这里我use一下啊。柚子的歌。States好,在这里面就可以用这个query啊,对它进行进一步的一个筛选,就是查询条件,然后用上我们的states也是用when啊。就是。Do cried。这个啊问。这样就可以了啊,这样对三级就进行了一个查找,但是呢啊,这个我们就不能放到这里了,清楚吧。这样我们要使用这种B包的形式,它就只能是这个名字啊,就是预查,呃,预查询的一个名字。
41:00
来看一下效果。好。发现拿到了是吧,那个为零的没有了,是不是为零的没有了,是不是我们把那个联想删了看没了是吧?啊但是这个时间格式就不对了。啊,又又多出来这两个字段,这种情况下,你要是使用这种方式呢,你就呃得在这里去写啊,去写这个查询到一个字段啊。CT。写歌。数组啊,这个数组。嗯,把这些都给括起来。好,再来看一下啊。哎,是不是字段也对了,状态为零的没有了是吧。啊,那如果我去改一个二技能。就是我把一个手机我给他。
42:04
改成禁用。好,把手机给它改成禁用。这时候我再对它做一下限制啊。同样的啊。他呢?跟这个写法是一样的,其实啊,跟这个写法是一样的,直接复制这个代码就可以。也是对他在做做一层这个。查询条件的一个限制。接下来。再来执行一下,看一下。你看是不是电子产品里面就只有我们的电脑手机没有了,对吧?啊,因为你手机被删了嘛,是不是这样就符合我们的预期了。啊,虽然代码有点多,但实际上嗯,都是在进行这个条件的一个字段的一个筛选,然后条件的一个查询。哎,就这么多啊。嗯,这样。我们的分类信息啊,就可以了啊。
43:00
那一般情况下,其实我们。要么就拿所有的,要么只查这个没被禁用的啊,没被删除的。啊,基本不会去查这个所有的这个已经删除的这个分类很少啊。好。接下来啊,我们这个函数还要再进行什么优化。层级的一个优化对不对,就是你拿了多少层。是不是?比如说你要拿一层,我就是给你返回顶级的啊,一级分类,你要拿那个两层,两级分类我就给你,到这第三级分类就不给你了,是吧,你要拿三级分类,哎,我就都给你。是吧,当然你可以传一个参数去控制啊,做一个判断,就是当你是几层的时候,我要不要加这个这些查询条件啊,要不要加这个预签预嵌套加载,或者甚至要不要加一个位置啊,我们可以通过这个判断就可以了啊。这个。我们暂时就先不写了。
44:02
但是思路可以给大家说一下。你在这之前,你可以先不用着急get。啊,甚至不用着急位子。就是你到这里就可以已经结束掉了,结束掉之后这里你用判断啊,判断就是说有没有传多少级啊,传了多少级之后,你再用它继续去调这个位置去封就可以了,去连连这个参数就可以了,最终再使用它的这个方法去盖的数据。啊,这么着就可以。啊,你要在判断你要的一个层级,比如说你只查两级是吧。啊两级,那我这个我就不要了,是不是就只给你返回两级的,你要是三级,我就比如把这个也给你,我下面再写个判断是不是也可以的,你要说一级一级的话,这个衣服都没有了,就只留这个一级的是不是?啊,所以说呃,这个查询呢,都是可以通过这个条件去控制的。那这里我们就拿所有吧。哎,测试一下都是可以的啊。
45:04
也就是说啊。要么你就拿所有,要么你就传个一只拿这个。只拿了一个。正常的,要么我就不传,不传我就拿所有。看一下来不穿的。就是所有的手机,然后包括这个就状态为零的也都拿到了。是不是?啊,之前你们可能好奇为他俩,为啥他俩没显示他的负极都被禁用了,他他们子集还有必要显示吗?肯定没有啊。啊。接下来啊。再做一个优化,做一个什么优化。就是每次我们使用分类都要去查大量的这个数据。是不是比较耗费性能,耗费数据性能,我们数据还比较少,就几条不明显,如果你的分类有几百条,上千条,甚至几万条呢。所以说我们要对分类做一个缓存。啊,但是。对分类怎么做缓存呢。啊,如果我们这里不通过这个状态,就是没有状态条件,那就简单了,我们直接把这个数据结果缓存起来就可以了,是不是,那现在我们有可能是查所有的,也有可能去查这个啊这个纸。
46:08
就是说没有被禁用的就能正常使用的,所以我们要做两个缓存。对吧。那我们干脆就不如再去写个函数好了。啊。再去写两个这个辅助函数,一个是缓存了所有的,一个是缓存了这个。啊,这个只是正常使用的。是不是你当然也可以在这里面写,在这里面写的话,你要也是要写这个,呃,判断什么的,一大堆逻辑,我们把它拆出来啊。衣服啊。嗯,Function。啊,我们加上CA啊,CA1CA杠。CATE。吉娃娃啊。缓存的这个分类。
47:01
GORY。等一会儿啊。这个我们把这个名字写啊,所有分类原始数据。这个我们作为是缓存。正常就是没被禁用的,没被禁用的。分类。对吧,好。然后我们写个方形。这个名字。啊,这个是没被禁用的,那我们同样的复制一个。啊,就是一个进,就是说所有的。缓存所有的分类是不是。那我们再加个凹就可以了哦。
48:01
好,就是为了它做一个区分,那这里面怎么缓存呢?我们使用开启啊辅助函数进行缓存,使用它的这个remember forever。呃,里面有两个参数,一个是K一个是call back啊K就是我们缓存的K,然后call back就是我们就说当没有缓存的时候,就执行这里面的一个数据嘛,我们存这里面的数据就可以了,它就会把我们缓存起来,Return,谁return的是我们调这个函数执行的一个结果。是吧?好,那我们这里是谁缓存没被禁用的,所以我们要传个一啊,就是调这个函数传个一,只拿这个没被禁用的这个数据进行缓存。清楚吗?好,那个K,我们来给上啊K,然后。嗯,就用这个K吧,也可以啊,和函数名一样,没事,这是呃,基于缓存的一个K。同样的复制一下代码啊,到这个里面可以换一换,可以换成它,那这个我们就不传了,因为这个缓存是缓存所有的嘛,是不是。
49:06
啊,所有的一个分类。好。这个就不传了。这有两个缓存。哎,接下来我们使用。哪个呢?因为我们后台的分类列表肯定要就是说啊,这个函数名得改一改啊。忘了改了,改成or。因为我们后台的这个分类的列表,我们要拿所有的,所以使用这个函数啊。改成它就可以了,好,这个就是拿这个所有的这个分类,并且是缓存过后的。来试一下。等一下啊。这个结果没有return啊。所以我们的这个。
50:00
拿不到结果,我们要把这个结果出去,我们外面调用的时候才能拿到这个结果,清楚吧。来,再试一下。诶是不是有了,这是他所有的,你会发现这些被禁用的也在看到了吗?而且是走了缓存的。啊,没有走数据库。那怎么证明呢?你看啊。我们在这个数据库查询这一块啊,数据库查询这块,甚至这个方法里面,我们去滴滴。如果他能DD,说明走了数据库,没有DD就说明没有走数据库。大家看没有滴滴吧,走了缓存对不对,我们缓存也生效了啊好。这样我们两个缓存,一个是呃拿没有被禁用的,一个是拿所有的就做好了。啊,接下来我们再想件事情,因为缓存的话,我们是forever就永久缓存,除非你去销毁它是不是。那怎么办?比如说我们添加了一个数据,我们添加一个数据。他走了缓存又没走我们数据库,所以我们添加数据它显示不出来呀。来,我们试一试。嗯。
51:00
接着添加一个数据啊。看一下我们的数据库。我们给这个服装衣帽去添加一个子集啊,然后呢,它PID是二。添加一个男装,找到我们添加在这里。嗯,没了是吧,我们来看一个。POS的方式。复制一下这个地址。好,Body参数。内幕男装?添加到谁下面PID添加到我们的二这个服装衣帽上面。添加成,呃,这个没有talking啊。全场啊。添加成功啊,201CREATE来看一下数据库是不是多了一个,你看男装,接下来去看我们的获取所有的这个分分类。查询。找一找。发现服装业外还是没有自己,对不对,为什么,因为走了缓存对吧,你添加了数据,我又没走,你数据库怎么会有呢?所以这里有问题啊,我们添加有问题还在,就说因为手动缓存,所以我们在签的时候要刷新缓存。
52:12
是不是创建成功之后刷新缓存对吧,刷新缓存。对不对,怎么刷新呢?把那个K给遗忘掉不就可以了。是吧?好,但是啊,我们这里啊,你刷新缓存呢,你要把啊这两个缓存就是。缓存的这个所有的和这个被禁用的,你都要去给它删掉。听什么?啊。所以。那我们总不可能啊,在这里去删一下这个,再去删一下这个是吧,比较麻烦,那我们为什么不再写一个辅助函数呢。清空啊,分类缓存你不要这个把所有的缓存都清掉啊。好。
53:01
嗯,Forget。等一下啊。就在它上面改吧,啊forget啊。啊,就是说以往这个分类的这个缓存。好。那遗忘缓存呢,其实就是使用这个开启的这个。Forget方法啊,去遗忘某个K啊,你不能去把所有的给删掉,我们遗忘指定的K就可以了啊好先把谁给删掉呢?先把这个K,我们缓存的这个K给删掉。再复制一个。啊,把缓存的所有的这个啊K也给删掉就可以了,是不是啊这种像呃,只要你执行就行了,这种函数我们不用给返回结果也不用判断好,直接这里去添加的时候去调用就可以了。
54:03
刷新缓存啊,就说啊清空清空。清空。分类缓存啊,我们不用写刷新,不用说再清空的时候,再重新去请求,请求这个方法再重建一次,当我们用到的时候,它就会自己去重建缓存啊。来,再尝试一下。啊,当然你现在去拿还是没有的。因为我们的缓存还是没有清,我们再添加一条试试啊,再添加个什么呢?添加个女装也添加到这个服服装下面。女装。添加成功啊,201可接着去刷新一下我们的列表。看一看缓存是否清掉。是不是男装有了,女装有了,证明我们的缓存成功的给清掉,并且啊,在我们请求的时候,他会重新帮我们去建这个缓存啊。这样是比较完善的一个功能。如果我们比如说前台首页或者这个查询的时候列表要去使用的话,只需要使用这个啊,没有被禁用的就可以了,如果我们后台管理列表需要查所有的分类列表,就使用这种所有的。
55:14
关于这个分类的添加和分类的这个列表就说到这里。
我来说两句