这篇文章主要对TP5.0的like查询 有可能本文章的案例 你在以后会遇的到
实现功能:同一个字段多个查询条件
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.'%']
];
}
}