• TP5多条件搜索,同时有必要条件


    $model = $this->model;
            // 查询是否有搜索参数
            $search = input('?get.search') ? trim(input('get.search')) : false;
    
            $list = $model;
            if($search) {
                // 查询相关标签
                $searchTags = model('tag')
                        ->alias('a')
                        ->join('tagmap b', 'b.tagid = a.id')
                        ->where('a.name', 'like', '%' . $search . '%')
                        ->column('b.tid');
                $tagsTeacherIdsArr = preg_grep('/d+/' ,$searchTags);
                $tagsTeacherIds = join(',' ,array_unique($tagsTeacherIdsArr));
            // 闭包搜索 内容
    $list = $list->where(function ($query) use ($search, $tagsTeacherIds) { $query->whereOr('id','in',$tagsTeacherIds) ->whereOr('name', 'like', '%' . $search . '%') ->whereOr('desc', 'like', '%' . $search . '%'); }); }
          // 必要条件
    $list = $list->where([ 'ispublic' => 1, 'isdel' => 0 ]) ->order('sort','desc') ->paginate(15,false,[ 'query' => request()->param() ]);

    前言:where里面的条件是 && 的关系,whereOr里面的条件是 | | 的关系,

     如果不用闭包,直接在外面whereOr的话会查询数据库所有的,条件就不起作用了

    想要得到的效果:

        1.筛选出is_deleted字段为0(未删除)的公告

        2.筛选出全部状态为已发送(status=1)的公告

        3.状态为草稿的公告仅自己可见

    代码(红色框起来的部分):

    等价于select * from table(表名) WHERE ( `admin_id` = 当前用户的id   OR `status` = '1' ) and `is_deleted` = '0 ;      

    注: 1.$params = ['is_deleted'=>0]     where()可以写多个条件,逗号分隔,如where(['name'=>'坤坤','is_deleted'=>0])

      2.order是排序方式

      3.field是要查找的字段

    引用: https://www.cnblogs.com/youantianqin/p/11087098.html

  • 相关阅读:
    day13_迭代器,生成器
    作业礼包
    day12_装饰器进阶
    装饰器作业
    day11_装饰器
    函数作业
    day10-函数进阶
    数据类型-习题解答
    day09_函数
    PHP 完美分页
  • 原文地址:https://www.cnblogs.com/init-007/p/11516977.html
Copyright © 2020-2023  润新知