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是要查找的字段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了