ThinkPHP6多条件搜索查询,表达式查询 FIND_IN_SET查询
发表于:2022-01-02 12:00:25浏览:2804次
最近做项目的时候使用到ThinkPHP6的多条件搜索查询,表达式查询以及FIND_IN_SET查询,这些平时用得比较少的查询方法每次都要去查找ThinkPHP6的使用文档,不方便,所以把关键代码整理一下放这里方便以后使用。
1、ThinkPHP6的多条件搜索 and 查询
$map = []; //条件 $map[] = ['status', '=', 1]; $map[] = ['type', '=', $type]; $map[] = ['url', 'like', $url. '%']; $map[] = ['date', 'between time', [$startTime, $endTime]]; $list = Db::name('message') ->where($map) ->order($order) ->paginate(['list_rows' => $rows, 'query' => $param]) ->toArray();
2、ThinkPHP6的多条件搜索 or 查询
$map1 = []; $map2 = []; //条件1 $map1[] = ['status', '=', 1]; $map1[] = ['type', '=', $type]; $map1[] = ['date', 'between time', [$startTime, $endTime]]; //条件2 $map2[] = ['status', '=', 0]; $map2[] = ['type', '=', $type]; $map2[] = ['date', '>', $endTime]; $map2[] = ['date', '<', $startTime]; $list = Db::name('Flow') ->field('id,name,check_type') ->whereOr([$map1,$map2]) ->order('id desc') ->paginate(['list_rows' => $rows, 'query' => $param]) ->toArray();
3、ThinkPHP6的FIND_IN_SET查询
FIND_IN_SET是什么方法?用在哪些地方?举个例子来说:
有个文章表里面有个type字段,它存储的是文章类型,有 1头条、2推荐、3热点、4图文等等 。
现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储。这就要我们的 find_in_set 出马的时候到了。
简单的FIND_IN_SET查询:
$list = Db::name('Flow')->whereRaw("FIND_IN_SET(3,type)")->select()->toArray();
复杂的FIND_IN_SET查询,且接收变量的查询:
//变量 $type = 1; $department =1; //查询条件 $map1 = []; $map2 = []; $map1[] = ['status', '=', 1]; $map1[] = ['type', '=', $type]; $map1[] = ['department_ids', '=', '']; $map2[] = ['status', '=', 1]; $map2[] = ['type', '=', $type]; $map2[] = ['', 'exp', Db::raw("FIND_IN_SET('{$department}',department_ids)")]; $list = Db::name('Flow') ->field('id,name,check_type') ->whereOr([$map1,$map2]) ->order('id desc') ->paginate(['list_rows' => $rows, 'query' => $param]) ->toArray();