$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
转载于:https://www.cnblogs.com/init-007/p/11516977.html