00:01
这节课来完成一下博客的搜索功能。搜索一般是把这个搜索的条件还是提交到当前的一个列表页。来通过这个不同的搜索条件。去确定我们的查询的一个结果集。首先要去修改一下我们这个头部的一个搜索。找到头部。修改一下啊,这个搜索的内容。Input给上name,如果没有name的话,不能提交到后台。关键字。嗯。这里是啥不分类型可以好这个的话form的啊,Method可以不给,不给的话默认就会使用get。
01:00
Action也可以不给,不给的话呢,是默认使用啊,当前的链接,但是如果你要写的话啊,就写我们这个index啊。这个提交的地址最好还是写上,为什么呢?因为我们这个头部在其他页面也会用到这个头部,如果你提交到当前页就不是我们这个列表页了,对吧,比如我们在啊详情里面。啊,如果你去提交这个的搜索的话。就不会回到这个列表页。所以说。那这个提交的地址还是要给上。然后我们就切他的首页。然后去首页的控制器。Controller。Index controller。我们的数据啊,搜索的数据会提交到这里,所以说需要一个request的一个依赖输入来获取用户提交的一个输入。来打印一下request里面提交的输入。
02:07
搜索。是不是有一个Q2对吧。这样的话,我们搜索条件能过来,就可以进行一个搜索。首先来定一个变量,获取这个数字条件。从request里面的query里面去获取。用户提交的这个搜索的关键字啊,因为我们这是一个。呃,Get请求,Get请求的话呢,它这个提交的参数会附加到链接的上面,对吧,所以可以用query去获取的,当然也可以用这个input啊,也可以直接用属性获取,都是可以的。这里我们使用query,使用这个。也可以的。
03:02
啊,就是request这个。或者你直接用属性。获取这个Q的都是可以的。把这个注释掉。测试一下获取的这个关键字。刷新一下是不是可以拿到啊,但有时候我们的这个关键字是吧,不存在。所以说在进行条件查询的时候呢,我们要做一下判断,如果你进行了搜索,我就按照这个关键字进行搜索,如果你没有。要搜索我就给你查所有。也就是说,我们的搜索条件可能存在,也可能不存在。啊,这个时候用什么查询条件呢?可以使用when。第一个参数,接收一个我们要判断的一个条件,我们就判断这个搜索条件。
04:00
第二个参数是一个必包函数啊,里面可以写我们的查询。然后B包函数的第一个参数是查询构造器的query。啊,第二个参数呢,是我们要用到的这个查询的这个外部的一个变量啊,当然你也可以使用啊柚子的方式去使用外部的一个变量。因为在B包函数里面,你没有办法是直接用到外部的这个变量的。接着写我们的查询条件,也就是当你的关键字存在的时候啊,我进行关键字的一个查询,查询什么呢。Where title啊,Like使用模糊查询,然后这里面是百分号。啊,模糊查询。好,里面写我们的这个变量。用双引号可以直接去写变量,这样方便一些。
05:01
这样的话就是当你的这个查询的这个关键字啊,存在的时候,我给你进行这个啊一个模糊搜索,当你不存在的时候,我这行就不执行了,直接去执行下面的了。是吗?啊。把这个换换行。我们来试一下。回首页。进行搜索,比如我搜索啊。这个关键字。哎,是不是没有搜着。二。也没有对吧。我不提到关键字,是不是提到搜索到所有了我们的名字里面只有什么,只有。311啊,这样的是不是查找了对不对,因为我们没有对这个内容进行一个查找,所以说现在只能搜名字。如果你要写对内容怎么办呢?你这里要写上O才可以啊。
06:13
同样。写上这个变量。来看一下。啊,那现在我们的,呃,因为之前做插入练习的时候,插入的博客都一样,不好区分是吧?啊只有一个测试博客,我们先去添加几条博客。啊,要执行一个登录操作。添加啊。A。然后添加bbb,这样方便我们去做区分,然后分类,我们尽可能选不一样的。
07:03
够我们用啊。可以看到啊,我们新添加的博客呢,是在这个后面。对吧,没有在前面,所以这个查询。还要加一些排序条件。你说欧的?Update。我们按更新时间去排序啊DC。因为有可能一个人发的文章比较早,但是他最近发就是说对文章进行了更新,所以我按照更新字段。来进行排序,先看一下这个数据有了是吧,接着我们去搜索,比如说搜索啊CCCC。是不是搜到CC就搜到ddd?没有对吧,搜索一。是没有。但现在有一个问题。我们这里啊,是有这个搜索的关键字啊,这个内容没有显示到这里,是不是体验不是很好,我们要让我们的搜索的这个关键字能显示在这里。
08:06
怎么显示呢?去修改。那这个Y。给他一个Y6,那Y6内容是什么呢?是。他。查询的内容对吧,就是查询字符串里面进行的搜索的这个参数。所以在这里可以使用request的辅助函数,使用它的input啊,或者它的get。他的这个query获取到。你查询到这个关键字的一个内容,放到这个Y6里面,这样的话啊,就会从这里面去获取这个值,写到这里来看一下啊。刷新一下。对不对。好。那我们搜索其他的内容,比如说诶。是不是也可以?啊,接下来再看一个问题。我们搜索完这个内容之后,然后去点击这个分页,你从左下角的链接你都可以看到这个分页是没有带上我们这个搜索条件的,对吧,那就会产生一个问题,当我点击这个跳转的时候,相当于啊。
09:10
我们的塑料条件没有了,对吧?那结果肯定也就不准确了,看看。是不是?所以说我们要就是进行搜索之后,要把这个搜索的条件也附加到这个链接上。之前学分页是不是有一个open的方法吧,Open的方法可以附加参数到分页链接对不对?下面来试一下啊。找到分页的地方,在首页。这里是分页,可以给他加一个这样一个参数。啊,最佳的是谁呢?是我们的这个关键词啊,然后直是谁呢?直是request里面。Query。
10:01
嗯,这个关键字,也就是这个值。是从我们的查询字符串里面去获取,附加到这个链接上就可以了,现在再来试一下搜索123。好,是三页。对吧。然后。有五条数量,你看文章数量是五条,这时候我们放到这个第二页上,看左下角的链接是不是给我们带上了那个查搜索的这个关键字。对吧,那我们点的时候呢,也会把这个搜索关键给我附加上,这样的话分页的数据就是对的啊,会给我们微十上这个搜索条件。都是对的啊。那。呃,我们现在呢,搜索条件只有一个,所以你这么写。啊,没问题,但如果我们的搜索条件比较多呢,假如我们有20个搜索条件,你是不是要写很长很长很长。是不是?来看一下分页,它还给我们提供了一个什么方法呢?要把所有的参数附加到分页的链接上,可以使用with啊,Quite string这个方法。
11:03
我们来试一下,看看和我们现在的这个结果是不是一样的,这个先注释掉啊。这个先注释掉,你保留这个代码。啊,这是个方法。现在啊,我先回首页,然后重新搜索点三。这个搜索结果是对的,接着看分页的参数,左下角是不给我们带上了一个参数,然后我们点第二页,这数据都是对的。啊,接下来呢。我们再去添加一个搜索条件,因为我们博客是不是还有分类啊,我们在添加一个分类的一个搜索条件。在这里放一个下拉框。分裂的下列框可以去。嗯,添加的这个页面直接去复制就可以了。用法都是一样的。找到薄客的添加页面。找到它分类这一块。啊,就这个。
12:01
直接复制放到我们首页就行了。放到头部啊,不是手链头部这里。看一下我们的样式。有点大,稍微调小一点。给他加一个啊。Form。到control。杠SM小点的把它显得小一点,并且。距离左边啊有三个。两个吧。再刷新一下看效果啊,页面可以了,然我们的分类也都有,对不对,现在呢,我们想要啊,搜索的时候带着这个分类一起搜索。是吧,我们分类ID能提交过去了。同样的在。控制器这里。要获取到分类的这个。ID啊。
13:02
获取分类ID。它也是有可能存在,有可能不存在啊,所以还是要使用问方法。等于request里面的query。这个字段啊。就是。他的这个name吗?他的这个name知道。然后写我们的问方法。问,啊,当你的这个分类ID存在的时候,我对你进行查询啊。那。B包函数里面第一个是查询构造器。啊,可以使用柚子。来使用外部的这个变量。啊,当然问方法的话呢,你如果不使用柚子,还是可以直接把它作为第二个参数去写到这里的,都是可以的。
14:04
这里还统一使用柚子吧。当分类ID存在,那么我们使用查询构造器query。VR森林ID。等于我们搜索的这个分类ID就可以了。嗯,来看看效果。好,现在选择一个分类PP。就是把他们的他也给查出来了,你看。我们把这个关键字给删掉啊,先把关键字给删掉,现在只查PP。是不是查出来PP了,接着我们把这个分类,呃,也给维持上分类和。这个input的维持有点不一样啊,它是要根据这个option的这个判断进行这个select才可以,之前我们添加是判断的old嘛,那这里应该是判断谁判断这个request里面的。
15:03
分类ID对吧,如果我们request搜索里面的这个查询支付券里面呢。分类ID等于它循环的这个ID,我们就让它选中,这样的话分类啊就可以维持住这个搜索。看一看啊,搜索PP好,这是当关键字为空,当分类,只有分类去搜索的时候。啊,数据都是正常的,比如搜索react。对不对,但是。啊,比如再看PP。但是什么呢?一旦你加上这个关键字。你就会发现你的数据变多了。对吧,而且我们的这个分类ID等于一的。数据。找找。是不是没有,还没有配置分类呢,说明我们的查询肯定出问题了。问题出在哪呢?问题就是出现在。这个关键字这里。啊,它为什么会出问题呢?因为这里。我们是使用看到了没有。
16:00
也就是说,其实温的话,它只是相当于一个条件,你存在我就进行里面的查询,对吧,那好它存在,它存在相当于就没有没有这个了,对不对。它也存在,就相当于也没有这个了,最后我们的结果相当于什么是?呃,对最外层的进行。这个where you or对吧,所以我们的关键字啊,这个or这个结果。就相当于是对所有条件的一个啊,这个获得一个结果,所以会查到这个OL。这时候怎么办?我们肯定不能让这个。奥威尔去影响到全局对吧?他因为想让他作为一组去进行一个查询。听懂吗?这样才不会影响到我们全局的一个数据。啊,把他俩作为一组去查询,查询条件怎么分组看。那查询过到期里面。啊,关于这个VR的查询分组。这里面首次的呢,就告诉你去怎么用。参数分组。
17:00
啊,有时候。啊,我们需要更高级的VR子爵。就是让这个。啊,参数进行一个分组。看到了吧。好。嗯,我们先看看这种不分组的情况,先看看它的circle是什么啊。打印它的circle很简单,这里我们不用这个分页。用什么呢?使用他的这个。比例啊,方法。看一下。啊,还是这个地址啊,直接提交。这是我们的一个circlel。就是在我们不进行参数分组的时候,看一看SQ语句是什么样的啊,使用这个。啊,模型的这个DD方法给打印出来,我们查询那个circlel。是selecting from这个表,然后是where,我们title like它,然后是all,看到了吗?All all content like它,然后又是and,分离ID等于它,最后是and。
18:07
是不是这个奥视在这个最外层的一个条件,也就是说他无论如何他都会拿到这个结果和其他的一个结果进行一个呃合并。对吧,那我们现在把它们给进行参数分组,看看分组之后是什么样的参数分组使用啊query的。V方法,V2方法呢,啊,里面是一个必包函数。就是把我们的这个查询去写到这个B波函数里面。就可以了。当然这个是。这个VR提供的这个query。这个宽RY还是查询多到器只我们把它进行了一个分组。但是我们现在需要用到它是吧?那怎么办呢?B包要使用外部变量,需要使用柚子。柚子它好。现在我们把这两个条件。就是把它放到了一个Y2组里面,看他还会不会对外部产生影响,还是继续看一下它的circle。
19:05
来刷新。你会发现。这里是不是多了一个括号对吧,也就是我们在这里用啊这个V尔进行分组之后,在实际的社会语句中,它是加了一个括号,这样的话加了括号的话也是他们这是一组一个条件,对不对,Where它或者它然后是按的。对吧,这样放到一组里面,它不会对我们的全局的查询产生造成影响。兄弟们,现在我们把打印关掉。把这个分页打开,再来看一下结果对不对。把这个打印关掉啊。这结果是不是就对了?没有同时呃,Title或者内容包含123的,并且分类是PVP的。对不对,我们选择其他类的分类来进行查询。好,QQ我们搜索这个ddd。还是CTC?
20:01
B。是不是有对吧,这样的话才能满足我们,同时啊关键字还有分类进行一个。啊,同时的一个查询,同时满足这两个条件才可以。这里在我们在使用这个O的时候,一定要慎重,千万不要不能让这个or去影响到我们全局的一个查询。啊,如果碰到这种比较复杂的一些查询,可以把这个OL给放到。啊,它的相对的查询条件的一个分组的里面,把它给进行分组。这样就不会影响到啊,最外层的一个查询。现在我们的首页的数据啊,就处理好了。包括我们的。这个。分页的这个参数也能附加上,下面我们同时选择。啊,看一看123是什么分类啊,是这个vuee啊,同时搜索123,并且选择这个vuee分类,可以查到这三个数据,而且看我们分类的搜索条件,是不是我们所有的这个搜索的这个条件都给我们带着呢,那我们点第二页。
21:07
对吧,所有的塑料条件都给我们带着呢啊,这就是分页的。这个啊方法可以帮我们附加上所有的所的条件再做。啊,搜索加扉页的时候特别好用。
我来说两句