我们在开发中会遇到关键词查询,但是查询的关键词又是多个字段的。
我们要考虑到的是这几个字段LIKE查询的时候,他们的关系是或关系,最外层则是和关系。
1、实现思想
- 举例子:我们要查询用户表中的 1.用户名 2.用户公司名称 3.用户标签,
- 我们另外再带上 用户类型为1 的条件。大概的模式如下:
类型 =1 AND (用户名 LIKE %关键词% OR 用户公司名称 LIKE %关键词% OR 用户标签 LIKE %关键词%)
2、TP5如何实现
2.1、第一种实现方法
$keyword = input('keyword') ?? '';
$user = (new UserModel)->where('type', 1)
->where(function ($query) use ($keyword) {
if ($keyword == '') {
$query->whereOr('username', 'like', '%' . $keyword . '%')
->whereOr('company_name', 'like', '%' . $keyword . '%')
->whereOr('labels', 'like', '%' . $keyword . '%');
}
})->select();
其中子条件中的第一个条件用where和whereOr效果都是一样的,但后面两个必须用whereOr
2.2、第二种实现方法
$keyword = input('keyword') ?? '';
$user = (new UserModel)->where('type', 1)
->where(function ($query) use ($keyword) {
if ($keyword == '') {
$query->where("concat(username,company_name,labels) LIKE '%$keyword%' ");
}
})->select();
下面这种用了数据库方法的concat,目的是将要查询的字段拼接在一起与关键词匹配,也就是或查询
- 另外需要注意的是第二种需要用双引号,关键词需要用单引号括起来。
- 这种查询需要整个条件写在一起,不能单独逗号分隔写
网友评论