美文网首页PHP开发PHP经验分享
TP5 实现多字段的关键词模糊查询

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

作者: 华仔233 | 来源:发表于2020-04-22 09:55 被阅读0次

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

    我们要考虑到的是这几个字段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,目的是将要查询的字段拼接在一起与关键词匹配,也就是或查询

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

    相关文章

      网友评论

        本文标题:TP5 实现多字段的关键词模糊查询

        本文链接:https://www.haomeiwen.com/subject/kkhmihtx.html