TP5 实现多字段的关键词模糊查询

我们在开发中会遇到关键词查询,但是查询的关键词又是多个字段的。

我们要考虑到的是这几个字段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();

其中子条件中的第一个条件用wherewhereOr效果都是一样的,但后面两个必须用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,目的是将要查询的字段拼接在一起与关键词匹配,也就是或查询

  • 另外需要注意的是第二种需要用双引号,关键词需要用单引号括起来。
  • 这种查询需要整个条件写在一起,不能单独逗号分隔写

你可能感兴趣的:(数据库操作)