微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【ThinkPHP】like同一个字段多个条件查询

这篇文章主要对TP5.0的like查询 有可能本文章的案例 你在以后会遇的到
实现功能:同一个字段多个查询条件

@H_502_7@

like同一个字段多个条件查询

案例还原

先看数据,我们需要使用2017,欧美,动作 这样的条件进行查询

在这里插入图片描述


然后我们可以看到查询结果

在这里插入图片描述


那我们的查询方式也很简单

$where['category'] = ['like',"%".$category."%"];

发现问题

我们的 2017,动作 这个是可以变为 2017,动作 或者 动作,2017,欧美等等

但是实际上会发现使用like查询只有第一种情况可以查到 或者只有 单个的时候才可以查到

这个时候过来就会反映过来一个问题那就是like查询是只可以正序查询 不可以倒叙查询

也就是说参数为 2017,动作 可以匹配 2017,动作 但是匹配不出来 动作,2017

#代码呈现
$a = '2017,欧美,动作';
# 如果参数是这样的一点问题没有
$where['category'] = ['like','%'.$a.'%'];

$a = '2017,动作';
# 如果参数是这样的那就直接凉  因为like是全量匹配不会分开匹配
$where['category'] = ['like','%'.$a.'%'];

条件缺一不可

在这里插入图片描述


在这里插入图片描述

解决问题

我们发现了问题那么我们是不是就可以考虑一下

既然单个可以查询到 那么我们就把参数进行分割一下,分割为数组,然后进行拼接like查询

但是这个时候问题来了,很多人都是没有做过同一字段多个条件查询

大多数的场景都是多个字段对应多个查询条件

这个时候或许就会想到用sql开始拼接 当然也可以实现,但是今天的主题在这里

本文重点来了

  • 首先打开tp5.0的官网搜索like 然后点击高级查询
  • 这是什么鬼 竟然官网文档有这种查询方式
  • 我们可以看到like字段进行了俩次查询
  • 那么我们也可以这样来试试啊

在这里插入图片描述


我们都知道在TP5中使用数组查询很方便,文档虽然没有使用数组查询 但是在5.1或者6.0都在支持数组查询 有利于写出很复杂的代码

$a = '2017,动作';
$category = implode(',',$a);
foreach($category as $k => $v) {
	$where['category'] = [
		['like','%'.$v.'%']
	];
}

按照以上代码看来我们需要实现的功能就已经出来了

在这里插入图片描述


这个时候参数无论怎么排放都是可以查询的到的,但是在测试的话就会发现这个时候 当只有一个参数时会报一个未定义数组下标为1一个错误

在这里插入图片描述


这个问题咔咔没有去翻看源码 在文档里留了言 等待流年大神回复 查看源码的时候后边在谈 最近很忙

然后最终实现源码

$a = '2017,$a);
$where = [];
if(count($category) === 1){
	$where['category'] = ['like','%'.$category.'%'];
}else{
	foreach($category as $k => $v) {
		$where['category'] = [
			['like','%'.$v.'%']
		];
	}
}

博主联系方式欢迎交流

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐