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

140 篇文章 8 订阅

这篇文章主要对TP5.0的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,欧美,动作';
$category = implode(',',$a);
$where = [];
if(count($category) === 1){
	$where['category'] = ['like','%'.$category.'%'];
}else{
	foreach($category as $k => $v) {
		$where['category'] = [
			['like','%'.$v.'%']
		];
	}
}

博主联系方式欢迎交流

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咔咔-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值