您的当前位置:首页>全部文章>文章详情

ThinkPHP6多条件搜索查询,表达式查询 FIND_IN_SET查询

发表于:2022-01-02 12:00:25浏览:3208次TAG: #ThinkPHP6 #多条件查询 #表达式查询

最近做项目的时候使用到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();